使用Doctrine DBAL的预处理语句中的字符串列表


List of strings in prepared statement using Doctrine DBAL

按照Doctrine 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

我做错什么了吗?

From doctrine documentation:

$stmt = $conn->executeQuery('SELECT * FROM articles WHERE id IN (?)',
    array(array(1, 2, 3, 4, 5, 6)),
    array('Doctrine'DBAL'Connection::PARAM_INT_ARRAY)
);

对于那些仍然有绑定值数组的问题,使用'executeQuery'方法的PARAM_INT_ARRAY或PARAM_STR_ARRAY常量,而不是将其绑定到准备好的语句。

来自Doctrine DBAL文档:

参数列表支持只适用于Doctrine'DBAL'Connection::executeQuery()和Doctrine'DBAL'Connection::executeUpdate(),而不适用于预处理语句的绑定方法。

在这个链接的末尾:http://doctrine-dbal.readthedocs.org/en/latest/reference/data-retrieval-and-manipulation.html list-of-parameters-conversion

尝试更改以下代码:

$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)

希望它能像错误显示给你的基础上,

使用Doctrine'DBAL'Types::SIMPLE_ARRAY代替'Doctrine'DBAL'Connection::PARAM_STR_ARRAY

例如

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