У меня проблема с SQL Query с массивом в моем предложении WHERE.
Например:
Мой массив:
$myarray[1] = "hi"; $myarray[2] = "there"; $myarray[3] = "everybody";
Мое заявление MySQL:
SELECT * FROM myTable WHERE title='".$myarray[]."'
Есть ли способ понять это? Я решил это так:
for(...) { $where = $where." title='".$myarray[$count]."' OR "; } $where = substr($where , 0, -3); ..... SELECT * FROM myTable WHERE ".$where."
Но если бы у меня было тысячи записей в моем массиве, SQL-запрос был бы слишком большим и медленным, не так ли?
благодаря
Вы можете использовать IN-функцию mysql
EDIT: Как сказал амошревира, вам нужно избегать строк в массиве.
$myarray[1] = "'hi'"; $myarray[2] = "'there'"; $myarray[3] = "'everybody'"; $newarray = implode(", ", $myarray); //makes format 'hi', 'there', 'everybody' SELECT * FROM myTable WHERE title IN ($newarray);
$myarray[1] = "hi"; $myarray[2] = "there"; $myarray[3] = "everybody"; //every quoted string should be escaped according to SQL rules foreach($myarray as $key => $val) { $myarray[$key] = mysql_real_escape_string($val); } $in_str = "'".implode("', '", $myarray)."'"; //makes format 'hi', 'there', 'everybody' SELECT * FROM myTable WHERE title IN ($in_str);
Вы можете использовать оператор IN
. Вы хотите, чтобы это выглядело так:
title IN ('hi', 'there', 'everybody')
Таким образом, вы бы сделали что-то вроде:
$sql = "SELECT * FROM myTable WHERE title IN '" . implode("','", $myarray) . "';"
Обратите внимание, что вам необходимо сначала отфильтровать ваш массив для SQL-инъекций.
Вы можете попробовать использовать IN в своем предложении WHERE,
SELECT * FROM myTable WHERE title IN ('hi','there','everybody');
или
SELECT * FROM myTable WHERE title IN ('.implode(',',$myarray).');