2012-04-21 78 views
0

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

使用旧的mysql_query,如果缺少一个值,它将不会将该值插入到数据库中。

我们如何处理准备好的陈述?

谢谢!

+1

如果你根本没有正确的错误处理的错误根本无视/沉默的错误之前,它的工作。 – ThiefMaster 2012-04-21 22:32:33

+2

如果你没有提供PDO/mysqli不能奇迹般地产生数据。相关的数据库字段是否为“非空”或什么的? – 2012-04-21 22:32:46

回答

0

他们处理这个问题的方式是正确地确保您输入了查询的所有相关值。因为在一天结束时,mysql_query()只能支持MySQL,但是PDO是关系数据存储的通用接口,并且它不需要确保输入全部信息你的数据。

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值在哪里?
1st & 3rd ?'s? PDO应该如何知道这一点?

此外,如果你知道这个问题的答案,你仍然可以处理它在PHP:

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