2

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

我做错什么了吗?

4

4 回答 4

8

来自 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

于 2014-07-09T10:22:11.623 回答
8

从学说文档中:

$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 常量,而不是将其绑定到准备好的语句。这是它工作的唯一方式。

于 2014-07-28T22:41:12.970 回答
-2

尝试更改以下代码:

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

希望它会在此基础上向您显示错误。

于 2013-05-29T07:43:16.890 回答
-3

使用 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);
于 2014-06-05T10:31:43.373 回答