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

教義文書から:

$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 に答える
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 に答える
-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\Connection::PARAM_STR_ARRAY の代わりに Doctrine\DBAL\Types::SIMPLE_ARRAY を使用してください

例えば

$values = ['stringa', 'stringb', 'stringc'];
$statement->bindValue ('column_name', $values, Doctrine\DBAL\Types::SIMPLE_ARRAY);
于 2014-06-05T10:31:43.373 に答える