1

我是 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"
));

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

4

3 回答 3

1

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

于 2014-01-08T08:15:45.657 回答
1

尝试从查询中删除引号:

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

如果您只是输入字符串,那么您可以使用第三个参数强制执行此操作bind_value PDO::PARAM_STR

$query -> bindValue($x, $arg, PDO::PARAM_STR);
于 2014-01-08T08:18:20.907 回答
1

它应该像没有引号一样,'?'即它应该是?

$db -> set("INSERT INTO messages(date,regard,sender,to,msg) VALUES(?,?,?,?,?)", array(
"bla",
"bla2",
"bla3",
"bla4",
"bla4"
));
于 2014-01-08T08:18:51.077 回答