Цикл в SQL-запросе

Я не уверен, почему этот SQL-запрос не работает.

Я новичок в SQL/PHP, поэтому прошу прощения.

mysql_query("
    SELECT * FROM table WHERE name = " . "'Bob'" . 
    while($i < $size)
    {
        $i++; 
        echo "OR name = '"; 
        echo $array[$i] . "'";
    } . 
    " ORDER BY id DESC "
);

Dreamweaver выдает ошибку, говоря, что это неправильно, но не говорит, что не так.

Можно ли поместить цикл while в команду sql?


person McDan Garrett    schedule 27.06.2012    source источник
comment
совет, попробуйте сначала запустить свой запрос в sql, заставьте его работать, а затем переместите его в свой код   -  person Boomer    schedule 27.06.2012


Ответы (4)


вы не можете использовать время в строке

$where = "";
if ($size > 0) 
{
$where .= " WHERE ";
}
while($i < $size)
{
$i++;
$where .= "OR name = '".$array[$i]."' ";
}

$query = "SELECT * FROM table WHERE name = '".Bob."'".$where." ORDER BY id DESC";
mysql_query($query);

(этот код не тестировался)

person David    schedule 27.06.2012

Уот!

Вы просто не можете написать это :D

Создайте свое условие OR перед написанием запроса, и все будет в порядке:

$myCondition = " ";
while($i < $size) {
    $i++;
    $myCondition .= "OR name = '" . $array[$i] . "'";
}
mysql_query(
    "SELECT * FROM table WHERE name = " . "'Bob'" . $myCondition . " ORDER BY id DESC ");
person Olivier Coilland    schedule 27.06.2012

echo должен вывести строку, и он не вернет строку.

Что-то вроде $str = "aaa" . echo "bbb"; не сработает.

В вашем случае лучше использовать IN.

foreach ($array as &$name) {
  $name = "'".mysql_real_escape_string($name)."'";
}
mysql_query("SELECT * FROM table WHERE name IN (".implode(',', $array).")");
person xdazz    schedule 27.06.2012

Или используйте

"SELECT * FROM table WHERE name IN(".implode( ',', $array).")";
person rbaker86    schedule 27.06.2012