gpt4 book ai didi

php - PDO 执行数组到字符串转换错误

转载 作者:可可西里 更新时间:2023-11-01 07:27:31 25 4
gpt4 key购买 nike

当我尝试运行 PDO 执行时,出现数组到字符串的转换错误。执行必须输入一个是普通字符串,另一个是数组。这是我的代码:

$id = "1";    
$array = array("a", "b", "c");
$in = str_repeat('?,', count($array) - 1) . '?';

$sql1 = "SELECT * FROM tbl1 AS tb1 RIGHT JOIN tbl2 AS tb2 ON (tb1.e_id = tb2.e_id)LEFT JOIN tbl3 AS tb3 ON (tb2.m_id = tb3.m_id) WHERE tb1.u_id = ? AND tb1.letters IN ($in)";


$statement1 = $db_handle->prepare($sql1);
$statement1->setFetchMode(PDO::FETCH_ASSOC);
$statement1->execute(array($id,$array));

$res = $statement1->fetchAll();

所以执行行给我字符串转换错误。我打印了我的数组和问号,它们输出正常。 sql 语句也很好,我已经在 phpMyAdmin 上试过了,它工作得很好,很明显我没有正确使用执行,但我不确定如何改变我执行它的方式。

谁能给我解释一下?

最佳答案

execute() 方法需要一个数组。来自文档:

Execute the prepared statement. If the prepared statement included parameter markers, you must either:

  • (snip)
  • pass an array of input-only parameter values

使用 array($id,$array),您将传递一个如下所示的多维数组:

Array
(
[0] => 1
[1] => Array
(
[0] => a
[1] => b
[2] => c
)

)

这肯定不是它所期望的。它需要一个包含要插入的值的一维数组。

要解决此问题,您必须修改数组格式。将 ID 添加到数组的开头,如下所示:

$array = array(1, "a",  "b",  "c");

如果 ID 变量是动态生成的,那么您可以使用 array_unshift() 函数手动将其添加到数组中:

$id = "1";    
$array = array("a", "b", "c");
$array = array_unshift($array, $id);

... 然后像这样修改 execute() 调用:

$statement1->execute($array);

关于php - PDO 执行数组到字符串转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22049317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com