2013-08-24 4 views
0

Мне нужно сделать обновление таблицы через php. Мне нужен ответ Ok или Ошибка. В принципе, мне нужно получить значение 1 для значения поля, если значение поля не равно нулю. Если значение поля равно нулю, я пытаюсь заставить произвести ошибку, заменив числового поля со строковым значениемОбновить, если (условие) или вызвать ошибку

SQL-утверждение:

$query = "Update mytable set myfield = if(myfield > 0 , myfield - 1 , 'AAA') where cliente_id = $cual_ID"; 

После этого код РНР:

if (mysql_query($query)) 
    { 
     echo "OK"; 
    } 
    else 
    { 
     echo "Error 4"; 
    } 

mysql_close($link); 

Когда я запускаю php, он всегда возвращает OK, также когда myfield больше нуля.

Любые идеи?

+0

'mysql_query' только возвращает ложь, если Цюй ery не выполняется. – Vulcan

ответ

0

Вы проверки логического возвращения в полном объеме вы делаете:

if (mysql_query($Query) === true){ 
// Mysql is returning true 
    echo "OK"; 
}else{ 
//MySQL is returning false 
} 

Вы должны выполнить другие задачи с вашим запросом .. например:

$Query = mysql_query($query); 

if (mysql_num_rows($Query) > 0){ 
// Rows detected are greater than 0 
echo "OK"; 
}else{ 
// Rows detected are less than 0 
echo "Error"; 
} 
0

Вы должны изменить свой SQL запрос к этому:

UPDATE mytable 
SET myfield = CASE 
    WHEN myfield = 0 THEN 'AAA' 
    WHEN myfield > 0 THEN myfield - 1 
    ELSE myfield = myfield 
    END 
WHERE cliente_id = $cual_ID 

Кроме того, вы должны пересмотреть принуждая ошибку способ сделать это. Я думаю, что есть более эффективные подходы (например, определение того, была ли какая-либо строка изменена или нет).

2

Вместо того, чтобы выдавать ошибку возможное решение ввести дополнительное условие для WHERE пункта myfield > 0 вашего заявления обновления и использовать mysql_affected_rows(), чтобы увидеть, если строка была обновлена ​​

$query = "UPDATE mytable 
      SET myfield = myfield - 1 
      WHERE cliente_id = $cual_ID 
      AND myfield > 0"; 
$result = mysql_query($query); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 
if (mysql_affected_rows() == 1) { 
    echo "OK"; 
} else { 
    echo "Error 4"; 
} 
mysql_close($link); 

На стороне записки: вместо того, чтобы интерполировать строки запроса рассмотрим использование prepared statements либо mysqli_* или PDO

+0

@Aplicaciones Помогла ли вам решить вашу проблему? – peterm

Смежные вопросы