Эй, у меня проблема, я хочу выполнить это обновление sql, но оно не работает. Кто-нибудь может мне помочь? Спасибо!

Код:

$temp = $_GET['ul'];

foreach ($temp as $key=> $value)
{
    $str=array();
    $arr=explode(',',$value); 
    $str =array($key=>$arr);

    for($i=0;$i<count($str[$key]);$i++)
    {
        $tripID='2';                    
        $sql = "UPDATE places_trips 
                SET orderNo='$i', ColumnNo='$key' 
                WHERE place_id=" . $str[$key][$i] . "
                AND trip_id=" . $tripID;
        mysql_query($sql);
        }
    } 
}

Я хочу установить $tripID = 2, но на самом деле $tripID=2222. Итак, как сделать так, чтобы $tripID=2 все время?

1
ekenfire 18 Янв 2010 в 10:04
Если я понимаю ваш вопрос, вы хотите, чтобы trip_id = $tripID был перед частью предложения set. Или, может быть, вы имеете в виду использовать == вместо =?
 – 
Justin Smith
18 Янв 2010 в 10:08

2 ответа

Ваш запрос не меняет trip_id. Он пытается изменить orderNo и ColumnNo для строк, где trip_id равен 2. Если я вас правильно понял, вы должны указать это в первой части вашего запроса:

"UPDATE places_trips SET orderNo = '$i', ColumnNo = '$key', trip_id = $tripID WHERE place_id = ".$str[$key][$i];

При этом читайте об инъекциях SQL. Вам это нужно, потому что ваш текущий код ужасно опасен.

3
zneak 18 Янв 2010 в 10:09

Надеюсь, это то, что вам нужно:

UPDATE places_trips SET
    orderNo = $i,
    ColumnNo = $key
WHERE place_id = $str[$key][$i]
AND trip_id RLIKE '^2+$';

Следует обновить все строки, в которых trip_id содержит только 2 с.

Также поищите в StackOverflow инъекции SQL, ваш код уязвим для них.

0
Community 23 Май 2017 в 15:03