0

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

对于较旧的 mysql_query,如果缺少某个值,它根本不会将该值插入到数据库中。

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

谢谢!

4

2 回答 2

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));
}
于 2012-05-05T15:17:48.953 回答
0

他们处理它的方式是正确确保您已为查询输入所有相关值。mysql_query() 可以随心所欲,因为归根结底,它只需要支持 MySQL,但 PDO 是关系数据存储的通用接口,它不会确保你输入了所有你的数据。

于 2012-04-21T22:43:22.570 回答