0

想要选择列值为 11 或 12 或 23 的 MySQL 行。尝试使用此类代码

$query_select_all = 'SELECT * FROM 2_1_journal WHERE CAST(EntryId AS UNSIGNED) IN (?)';
$sql = $db->prepare($query_select_all);
$data1[] = '11, 12, 23';
$sql->execute($data1);

但代码仅选择列值为 11 的行(第一个值来自$data1[] = '11, 12, 23';

尝试过,?并根据需要工作。

?这是没有(位置占位符)的语句

$query_select_all = 'SELECT * FROM 2_1_journal WHERE CAST(EntryId AS UNSIGNED) IN (11, 12, 23)';
$sql->execute();

该语句按预期工作(选择EntryId11 或EntryId12 或EntryId23 的行。

第一个代码中的错误(带有?)在哪里?

4

2 回答 2

1

基于https://stackoverflow.com/a/15991146/285587

$query_select_all = 'SELECT * FROM 2_1_journal WHERE CAST(EntryId AS UNSIGNED) IN';
$data1 = '11, 12, 23';
$data1 = explode(",",$data1);//Convert Comma Separated String into Array
$in  = str_repeat('?,', count($data1) - 1) . '?';
$query_select_all = $query_select_all .'('. $in .')';
$sql = $db->prepare($query_select_all);
$sql->execute($data1);
于 2013-06-25T07:56:05.563 回答
-1

我认为您使用 between 而不是 IN ... 更改语句。

于 2013-06-25T06:21:20.173 回答