use*_*542 4 php mysql arrays pdo
当我尝试运行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();
Run Code Online (Sandbox Code Playgroud)
所以执行行给了我字符串转换错误.我打印了我的数组和问号,输出很好.sql语句也没关系,我已经在phpMyAdmin上尝试了它并且工作得很好,所以我没有正确使用执行但我不知道如何改变我执行它的方式.
有人可以向我解释一下吗?
execute()方法需要单个数组.从文档:
执行准备好的声明.如果准备好的语句包含参数标记,则必须:
- (剪断)
- 传递一组仅输入参数值
随着array($id,$array)你将传递一个看起来像这样的多维数组:
Array
(
[0] => 1
[1] => Array
(
[0] => a
[1] => b
[2] => c
)
)
Run Code Online (Sandbox Code Playgroud)
这肯定不是它所期望的.它需要一个包含要插入的值的一维数组.
要解决此问题,您必须修改数组格式.将ID添加到数组的开头,如下所示:
$array = array(1, "a", "b", "c");
Run Code Online (Sandbox Code Playgroud)
如果动态生成ID变量,则可以使用array_unshift()函数手动将其添加到数组start :
$id = "1";
$array = array("a", "b", "c");
$array = array_unshift($array, $id);
Run Code Online (Sandbox Code Playgroud)
...然后execute()像这样修改调用:
$statement1->execute($array);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12740 次 |
| 最近记录: |