【问题标题】:PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: InvalidPDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: 无效
【发布时间】:2014-02-28 19:52:49
【问题描述】:

PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in 我得到这个错误为什么?列名正确。

$baslik         = $_POST["makale_basligi"];
$icerik         = trim($_POST["makale_icerigi"]);
$meta_desc      = $_POST["makale_meta_description"];
$id             = $_POST["makale_id"];
$kategori       = $_POST["makale_kategorisi"];
$makale_link    = convertTextToLinkFormat($baslik);

$update_makale  = $db->prepare("UPDATE makale SET "
        . "makale_kategorisi        = :kategori,"
        . "makale_link_baslik       = :link,"
        . "makale_baslik            = :baslik, "
        . "makale_icerik            = :icerik, "
        . "makale_meta_description  = :desc WHERE makale_id = '".$id."' ");
$update_makale->execute(array(':kategori'=>$kategori,':link'=>$makale_link ,':baslik' =>$baslik,':icerik' =>$icerik,':desc' =>$meta_desc));

【问题讨论】:

  • 为什么要在查询中直接附加$id?确保准备好的语句安全的唯一方法是正确使用它们。
  • 你是对的,但是有问题吗?
  • 可能。 $id 包含什么?如果它包含?:,那么它可以被解释为参数。或者更糟糕的是,如果我使用 SQL 注入来破坏您的查询;)
  • 一个整数来自_POST
  • 这里的另一个预感:如果在 SQL 和参数数组中将 :desc 替换为 :metadesc,它会起作用吗?

标签: php mysql pdo


【解决方案1】:

我认为硬编码$id 值并将其与 PDO 参数混合不是一个好主意。 它容易出错,而且 Id 在你的表中被定义为一个 int ,那你为什么要引用它呢?

将它与其他参数一起放入数组中:

$update_makale  = $db->prepare("UPDATE makale SET "
        . "makale_kategorisi        = :kategori,"
        . "makale_link_baslik       = :link,"
        . "makale_baslik            = :baslik, "
        . "makale_icerik            = :icerik, "
        . "makale_meta_description  = :desc WHERE makale_id = :id");

$update_makale->execute(array(
    ':kategori' => $kategori,
    ':link' => $makale_link,
    ':baslik' => $baslik,
    ':icerik' => $icerik,
    ':desc' => $meta_desc,
    ':id' => $id
));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 2011-08-08
    相关资源
    最近更新 更多