如何正确地使用PHP变量作为参数生成PDO语句?

如何正确地使用PHP变量作为参数生成PDO语句?,php,mysql,parameters,pdo,Php,Mysql,Parameters,Pdo,我目前拥有以下代码: $dbh = new PDO('mysql:host='.DATABASE_HOST.';dbname='.DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbh->prepare("INSERT INTO mdr_contacts SET fkRelatieId = 0, reseller = 0

我目前拥有以下代码:

$dbh = new PDO('mysql:host='.DATABASE_HOST.';dbname='.DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$dbh->prepare("INSERT INTO mdr_contacts SET fkRelatieId = 0, reseller = 0, code = :code, naam = :naam");
$dbh->execute(array(":code" => $contact["contact_id"],":naam" => $name));
但是,这似乎失败了:
致命错误:调用file.php第67行的未定义方法PDO::execute()

到目前为止,我所做的工作是:

  • 检查
    $name
    $contact
    是否存在并具有正确的值
  • 在prepare语句之前执行SELECT查询,以确保PDO正常工作
  • 运行代码时未将ATTR\u EMULATE\u PREPARES设置为false

  • 但是这些都不行,有人能给我指出正确的方向吗?

    您执行的是一条语句,而不是连接
    prepare()
    在连接上,返回一条语句

    另外,我更喜欢显式地对值调用bind,但这只是我的OCD prefs

     $statement = $dbh->prepare("INSERT INTO mdr_contacts SET fkRelatieId = 0, reseller = 0, code = :code, naam = :naam");
     $statement->bindValue(":code", $contact["contact_id"]);
     $statement->bindValue(":naam", $name);
     $statement->execute();
    

    天哪,我觉得自己像个白痴。这完全有效。谢谢。@RTB没问题。。。还要检查“name”的拼写;)