【问题标题】:PHP PDO bindValue() failsPHP PDO bindValue() 失败
【发布时间】:2014-01-26 05:28:32
【问题描述】:

我是 PHP 的 PDO 新手,我的数据库类的函数遇到了一点问题:

function set($query, $args = array())   {
try {
    $query = $this->rs->prepare($query);

    $x = 1;
    foreach($args as $arg)  {
        $query -> bindValue($x, $arg);
        $x++;
    }

    $query->execute($args);
}
catch(PDOException $e)  {
    print_r($e);
}
}

它应该自动绑定“?”在查询到它们在数组$args中的值。

例子:

$db -> set("INSERT INTO messages(date,regard,sender,to,msg) VALUES('?','?','?','?','?')", array(
    "bla",
    "bla2",
    "bla3",
    "bla4",
    "bla4"
));

但它不起作用。在数据库中,所有列都包含那些愚蠢的问号。问题出在哪里?

【问题讨论】:

标签: php mysql pdo bindvalue


【解决方案1】:

您已经引用了问号,因此数据库会看到仅包含一个 ? 的文字字符串,而不是占位符标记(问号)。只需使用问号而不加引号:系统会自动为相关数据类型使用正确的语法。

【讨论】:

  • 啊,我试试这个。如果这真的有效,我犯了一个非常愚蠢的错误......再次......编辑:它真的有效!太感谢了! :D
【解决方案2】:

尝试从查询中删除引号:

$db -> set("INSERT INTO messages(date,regard,sender,to,msg) VALUES(?,?,?,?,?)", array(
    "bla",
    "bla2",
    "bla3",
    "bla4",
    "bla4"
));

如果你只是输入字符串,那么你可以用bind_valuePDO::PARAM_STR中的第三个参数强制它

$query -> bindValue($x, $arg, PDO::PARAM_STR);

【讨论】:

    【解决方案3】:

    应该像不带引号的'?',即应该是?

    $db -> set("INSERT INTO messages(date,regard,sender,to,msg) VALUES(?,?,?,?,?)", array(
    "bla",
    "bla2",
    "bla3",
    "bla4",
    "bla4"
    ));
    

    【讨论】:

      猜你喜欢
      • 2017-08-29
      • 2013-11-12
      • 2012-07-31
      • 2013-01-03
      • 2011-02-11
      • 2013-02-15
      • 2014-08-20
      • 2011-04-13
      相关资源
      最近更新 更多