Массив в SQL-запросе?
У меня проблема с созданием SQL-запроса с массивом в моем предложении WHERE.
Например:
Мой массив:
$myarray[1] = "hi";
$myarray[2] = "there";
$myarray[3] = "everybody";
My MySQL Statement:
SELECT * FROM myTable WHERE title='".$myarray[]."'
Есть ли способ понять это?
Я сам решил это так:
for(...) {
$where = $where." title='".$myarray[$count]."' OR ";
}
$where = substr($where , 0, -3);
.....
SELECT * FROM myTable WHERE ".$where."
Но если бы у меня было тысячи записей в моем массиве, SQL-запрос был бы слишком большим и медленным, верно?
Спасибо
Ответы
Ответ 1
Вы можете использовать mysql IN-function
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);
Ответ 2
$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);
Ответ 3
Вы можете использовать оператор IN
. Вы хотите, чтобы это выглядело так:
title IN ('hi', 'there', 'everybody')
Итак, вы сделали бы что-то вроде:
$sql = "SELECT * FROM myTable WHERE title IN '" . implode("','", $myarray) . "';"
Обратите внимание, что вам необходимо сначала отфильтровать ваш массив для проблем с вложением SQL.
Ответ 4
Вы можете попробовать использовать IN
в своем предложении WHERE
,
SELECT * FROM myTable WHERE title IN ('hi', 'there', 'everybody');
или
SELECT * FROM myTable WHERE title IN ('.implode(',', $myarray).');