Php 使用DBAL准备语句中的字符串列表

Php 使用DBAL准备语句中的字符串列表,php,doctrine,dbal,Php,Doctrine,Dbal,按照原则DBAL文档,我应该能够绑定如下字符串值列表: $sql = 'SELECT * FROM mytable WHERE myfield IN (?)'; $stmt = $conn->prepare($sql); $stmt->bindValue('myfield', array('stringa', 'stringb', 'stringc'), \Doctrine\DBAL\Connection::PARAM_STR_ARRAY); $stmt->execute(

按照原则DBAL文档,我应该能够绑定如下字符串值列表:

$sql = 'SELECT * FROM mytable WHERE myfield IN (?)';

$stmt = $conn->prepare($sql);
$stmt->bindValue('myfield', array('stringa', 'stringb', 'stringc'), \Doctrine\DBAL\Connection::PARAM_STR_ARRAY);

$stmt->execute();
这将导致一个PHP通知并终止我的脚本

Notice: Array to string conversion in C:\www\eurocampings\vendor\doctrine\dbal\lib\Doctrine\DBAL\Statement.php on line 142

我做错什么了吗?

尝试更改以下代码:

$stmt->bindValue('fcodes', array('stringa', 'stringb', 'stringc'), \Doctrine\DBAL\Connection::PARAM_STR_ARRAY);
使用以下代码:

$stmt->bindValue('fcodes', "'stringa', 'stringb', 'stringc'", \Doctrine\DBAL\Connection::PARAM_STR_ARRAY)

在此基础上,希望它能像向您显示的错误一样工作。

使用条令\DBAL\Types::SIMPLE\u数组而不是\条令\DBAL\Connection::PARAM\u STR\u数组

比如说

$values = ['stringa', 'stringb', 'stringc'];
$statement->bindValue ('column_name', $values, Doctrine\DBAL\Types::SIMPLE_ARRAY);

从DBAL文档中:

参数列表支持仅适用于条令\DBAL\Connection::executeQuery()和条令\DBAL\Connection::executeUpdate(),而不适用于已准备语句的绑定方法

它位于此链接的末尾:

来自条令文件:

$stmt = $conn->executeQuery('SELECT * FROM articles WHERE id IN (?)',
    array(array(1, 2, 3, 4, 5, 6)),
    array(\Doctrine\DBAL\Connection::PARAM_INT_ARRAY)
);
对于那些在绑定值数组方面仍然存在问题的人,请将PARAM_INT_数组或PARAM_STR_数组常量与'executeQuery'方法一起使用,而不是将其绑定到准备好的语句。
这是唯一有效的方法。

提供更多详细信息。此处不提供。在你的回答中,没有起作用。当你提出建议时,请试着按照你说的去做。手动引用值——对于通常未知的DBMS,可能不是MySQL,不是Postgre,而是其他什么——并且内联加入字符串是不好的做法。当然,
,\document\DBAL\Connection::PARAM_STR_ARRAY
是错误的,因为您已经完成了所有的工作,并且指定了内联字符串-您的类型是错误的。他要求对
$stmt->bindValue
+
$stmt->execute()
做出决定,但对
$conn->executeQuery>。我不向上投票也不向下投票。如果他们还告诉我们它只适用于位置参数(即“?”占位符)而不是命名参数,那可能会更好。我只是花了很多分钟来解决这个问题。