PHP准备语句失败

时间:2012-04-21 22:29:34

标签: php mysql prepared-statement

我将准备好的sql insert语句(使用占位符?,?)传递到mysql数据库中。然后我使用 - >执行($ array)并传递一个值的单个数组。当表格的每个字段中输入数据(数组完成)时,它工作得很好(即插入),但是失败了如果只有一个元素没有完成,那么就完全没有了。

使用较旧的mysql_query,如果缺少值,则不会将该值插入数据库。

我们如何在准备好的陈述中处理这个问题?

谢谢!

2 个答案:

答案 0 :(得分:0)

您处理它的方法是正确确保您已为查询输入所有相关值。 mysql_query()可以像它想要的那样松懈,因为在一天结束时,它只需要支持MySQL,但PDO是关系数据存储的通用接口,它不需要确保你已经输入所有你的数据。

答案 1 :(得分:0)

我没有看到比较,因为mysql_query不带参数?

PDO对象要求您将元素绑定到参数。这是漫长的道路:

$stmt->bindParam(":namedParam", 1, PDO::PARAM_INT);

这是简单的,因此内部PDO仍然应该为自己做一些额外的工作:

$stmt->execute(array($value1, $value2, $etc));

如果您的查询如下所示:

INSET INTO mytbl VALUES (?, ?, ?, ?, ?)

你的$ data数组如下所示:

$data = array($val1, $val2, $val3);

您认为应该在哪里插入两个NULL值? 第1&第3 ?个? PDO应该如何知道?

此外,如果您确实知道该问题的答案,您仍然可以在PHP中处理它:

function queryMyTable($val1, $val2, $val3, $val4 = null, $val5 = null) {
    ...
    $stmt->execute(array($val1, $val2, $val3, $val4, $val5));
}