0

これは作業ステートメントなしです?

$query_select_all = "SELECT * FROM TableName WHERE CAST(ColumnName AS UNSIGNED) REGEXP '111|114|115'";
$sql = $db->prepare($query_select_all);
$sql->execute();

'111|114|115'php 変数として使用したい(例: $data)。

コードをに変更

$data = array('111|', '114|', '115');
$query_select_all = "SELECT * FROM TableName WHERE CAST(ColumnName AS UNSIGNED) REGEXP (?,?,?)";
$sql = $db->prepare($query_select_all);
$sql->execute($data);

$dataのように見えるArray ( [0] => 111| [1] => 114| [2] => 115 )

ステートメント get の実行後SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)

何かが正しくないと仮定します$data = array('111|', '114|', '115');

正しいコードとは?

4

2 に答える 2

1

regexp に 3 つのパラメーターを指定しますが、1 つだけにする必要があります。

... REGEXP (?,?,?)";

したがって、最終的に次のようなものが得られます。

... REGEXP ('111|','114|','115')";

さらに、配列要素の一部に char を追加する代わりに|、次のようなことができます。

$res = implode('|', $arr);

そして、SQL クエリで 1 つのパラメータ バインディングを使用するだけです。

于 2013-06-25T19:42:00.487 に答える
1

これは、REGEXP が期待するプレースホルダーは 1 つだけであることを意味しますが、3 つ指定しています。

これを変える:

$sql->execute($data);

に:

$sql->execute(array('111|114|115'));
于 2013-06-25T19:40:14.453 に答える