Подтвердить что ты не робот

Массив в 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-запрос был бы слишком большим и медленным, верно?

Спасибо

4b9b3361

Ответ 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).');