【问题标题】:Fatal error: Call to a member function prepare() on null while inserting data through wordpress致命错误:通过 wordpress 插入数据时在 null 上调用成员函数 prepare()
【发布时间】:2020-08-04 05:43:38
【问题描述】:

我卡在这里:致命错误:在 C:\wamp64\www\covid19-rdc\wp-content\plugins\cov19-drc-form\inclus\cdf-functions 中调用一个成员函数 prepare() on null。 php 在第 431 行。

我正在构建一个包含注册表单的 wordpress 插件。但是试图通过我的插件插入数据,我收到了这条消息。我在网上阅读过类似的问题,但没有一个与我的情况相近。我不喜欢 php,所以请帮忙。

这是我的连接:

require_once plugin_dir_path(__FILE__) . 'cnx_bdd.php';

其余代码如下:

//Connexion to the db in the connexion file

$host = "localhost";
$db   = "covid19rdc_db";
$user = "root";
$pass = "";
$charset = "utf8mb4";


try 
{
    $pdo = new PDO("mysql:host=$host;dbname=$db;charset=$charset", $user, $pass);
} 

catch (\PDOException $e) 
{
     throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

//这是保存数据的函数

function save_data()
{
    if ( isset($_POST['btnEnregistrer'] ) ) 
    {




        // sanitize entries

        global $nomPat, $postnomPat, $prenomPat, $datenaisPat, $sexePat, $etatcivil, $nationalite_ID, $telPat, $emailPat, $domicilePat, $commune_ID, $ville, $paysvisites, $date_entree, $point_entree, $contactUrgence, $emailUrgence, $telUrgence, $catdeclarant, $fonction_agent, $commentaires;         



            $nomPat         =   sanitize_text_field( $_POST['nomPat'] );
            $postnomPat     =   sanitize_text_field( $_POST['postnomPat'] );
            $prenomPat      =   sanitize_text_field( $_POST['prenomPat'] ); 
            $datenaisPat    =   $_POST['datenaisPat'];
            $sexePat        =   $_POST['sexePat'];
            $etatcivil      =   $_POST['etatcivil'];
            $nationalite_ID =   $_POST['nationalite_ID'];
            $telPat         =   sanitize_text_field( $_POST['telPat'] );                
            $emailPat       =   sanitize_email( $_POST['emailPat'] ); 
            $domicilePat    =   sanitize_text_field( $_POST['domicilePat'] );
            $commune_ID     =   $_POST['commune_ID'];
            $ville          =   sanitize_text_field( $_POST['ville'] );
            $paysvisites    =   sanitize_text_field( $_POST['paysvisites'] );
            $date_entree        =   $_POST['date_entree'];
            $point_entree   =   sanitize_text_field( $_POST['point_entree'] );
            $contactUrgence =   sanitize_text_field( $_POST['contactUrgence'] );                
            $emailUrgence   =   sanitize_email( $_POST['emailUrgence'] );
            $telUrgence     =   sanitize_text_field( $_POST['telUrgence'] );
            $catdeclarant   =   $_POST['catdeclarant'];
            $fonction_agent     =   sanitize_text_field( $_POST['fonction_agent'] );
            $commentaires   =   sanitize_text_field( $_POST['commentaires'] );



            $nomPat         =   $_POST['nomPat'] ;
            $postnomPat     =   $_POST['postnomPat'] ;
            $prenomPat      =   $_POST['prenomPat'] ; 
            $datenaisPat    =   $_POST['datenaisPat'];
            $sexePat        =   $_POST['sexePat'];
            $etatcivil      =   $_POST['etatcivil'];
            $nationalite_ID =   $_POST['nationalite_ID'];
            $telPat         =   $_POST['telPat'] ;              
            $emailPat       =   $_POST['emailPat'] ; 
            $domicilePat    =   $_POST['domicilePat'] ;
            $commune_ID     =   $_POST['commune_ID'];
            $ville          =   $_POST['ville'] ;
            $paysvisites    =   $_POST['paysvisites'] ;
            $date_entree    =   $_POST['date_entree'];
            $point_entree   =   $_POST['point_entree'] ;
            $contactUrgence =   $_POST['contactUrgence'] ;              
            $emailUrgence   =   $_POST['emailUrgence'] ;
            $telUrgence     =   $_POST['telUrgence'] ;
            $catdeclarant   =   $_POST['catdeclarant'];
            $fonction_agent     =   $_POST['fonction_agent'] ;
            $commentaires   =   $_POST['commentaires'] ;





        // insert data




        $sql = "INSERT INTO cov_patient(NomPatient, PostnomPatient, PrenomPatient, DateNaisPatient, SexePatient, EtatCivil, Nationalite_ID, TelPatient, EmailPatient, DomicilePatient, Commune_ID, Ville, PaysVisites, DateEntree, PointEntree, ContactUrgence, EmailUrgence, TelUrgence, CatDeclarant, FonctionAgent) VALUES (:nomPat, :postnomPat, :prenomPat, :datenaisPat, :sexePat, :etatcivil, :nationalite_ID, :telPat, :emailPat, :domicilePat, :commune_ID, :ville, :paysvisites, :date_entree, :point_entree, :contactUrgence, :emailUrgence, :telUrgence, :catdeclarant, :fonction_agent, :commentaires)";

        $req = $pdo->prepare($sql);

        $req-> execute(array(
                        ":nomPat"           => $nomPat, 
                        ":postnomPat"       => $postnomPat, 
                        ":prenomPat"        => $prenomPat,
                        ":datenaisPat"      => $datenaisPat, 
                        ":sexePat"          => $sexePat , 
                        ":etatcivil"        => $etatcivil , 
                        ":nationalite_ID"   => $nationalite_ID , 
                        ":telPat"           => $telPat , 
                        ":emailPat"         => $emailPat , 
                        ":domicilePat"      => $domicilePat , 
                        ":commune_ID"       => $commune_ID , 
                        ":ville"            => $ville ,
                        ":paysvisites"      => $paysvisites ,
                        ":date_entree"      => $date_entree ,
                        ":point_entree"     => $point_entree ,
                        ":contactUrgence"   => $contactUrgence ,
                        ":emailUrgence"     => $emailUrgence ,
                        ":telUrgence"       => $telUrgence ,
                        ":catdeclarant"     => $catdeclarant ,
                        ":fonction_agent"   => $fonction_agent ,
                        ":commentaires"     => $commentaires

                    )
                );

        echo 'Success.';   

    }



    else
    {
        //call the form creation function

        mon_formulaire_covid19(
            $nomPat, 
            $postnomPat, 
            $prenomPat, 
            $datenaisPat, 
            $sexePat, 
            $etatcivil, 
            $nationalite_ID, 
            $telPat, 
            $emailPat, 
            $domicilePat, 
            $commune_ID, 
            $ville,
            $paysvisites,
            $date_entree,
            $point_entree,
            $contactUrgence,
            $emailUrgence,
            $telUrgence,
            $catdeclarant,
            $fonction_agent,
            $commentaires
        );
    }

}

【问题讨论】:

    标签: php wordpress forms pdo insert


    【解决方案1】:

    当您声明 $pdo 时,它在全局范围内...

    try 
    {
      $pdo = new PDO("mysql:host=$host;dbname=$db;charset=$charset", $user, $pass);
    } 
    
    catch (\PDOException $e) 
    {
      throw new \PDOException($e->getMessage(), (int)$e->getCode());
    }
    

    但是在这个函数内部你没有引用 $pdo 对象...

    function save_data()
    {
    ...........
    $req = $pdo->prepare($sql);
    

    您可以在save_data() 函数中声明您的$pdo 连接,或者在您的save_data() 函数中使用global $pdo

    解决方案 1:

    function save_data()
    {
    ...........
    //Connexion to the db in the connexion file
    
    $host = "localhost";
    $db   = "covid19rdc_db";
    $user = "root";
    $pass = "";
    $charset = "utf8mb4";
    
    try 
    {
       $pdo = new PDO("mysql:host=$host;dbname=$db;charset=$charset", $user, $pass);
    } 
    
    catch (\PDOException $e) 
    {
       throw new \PDOException($e->getMessage(), (int)$e->getCode());
    }
    
    $req = $pdo->prepare($sql);
    

    解决方案 2:

    function save_data()
    {
    ...........
    global $pdo; //access $pdo db connection object
    $req = $pdo->prepare($sql);
    

    【讨论】:

      【解决方案2】:

      $pdo 变量 scope 有问题。

      您需要做的是将 $pdo 传递给函数。

      假设您的所有代码都位于 cnx_bdd.php 中,您的 save_data() 函数将需要一个参数,例如 save_data($pdo) {...}

      现在,当调用 save_data 函数时,您可以将连接句柄 ($pdo) 传递给它,一切都会正常工作。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2020-03-11
        • 1970-01-01
        • 1970-01-01
        • 2015-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多