2013-04-09 3 views
0

я поставил на пользователя тузд только ВЫБРАТЬ привилегияPDO errorinfo с пользователем, который не имеет никаких привилегий

Затем, когда я бегу UPDATE ... запрос

$sth = $db->prepare($update_sql); 

if (!$sth) { 
    echo "fail"; 
} 
else { 
    echo "Ok"; 
} 

Printed Ok, хотя в таблице ничего не обновляется.

Вопрос: Почему печатается Ok, а не fail?

ответ

3

Вы, вероятно, нужно execute запрос вы подготовили:

$sth->execute(); 

Подготовленное заявление само по себе ничего в базе данных не делать. documentation обеспечивает более подробную информацию.

Помните, что звонок exceute - это когда вы можете связать свой SQL placeholder values.

1

... потому что вы не сделали выполнить заявление - вы только подготовлено оно.

function try_to_run($sql, $db) 
{ 
    $sth = $db->prepare($update_sql); 
    if (false===$sth) return false; 
    $r=$sth->execute(); 
    return $r; 
} 

if (false===try_to_run($sql, $db)) { 
    echo "fail"; 
} else { 
    echo "Ok"; 
} 
+0

Почему 'if (false === $ sth)' идиома? Просто как «ложь» вам нужно что-то такое? – tadman

+0

Успешный запрос может возвращать нулевые строки. Хотя это семантически не проблема для метода execute (по сравнению с методом exec), я по-прежнему считаю это хорошей практикой. – symcbean

+0

Это действительно приводит к неудобному двойному отрицанию в 'else'. – tadman

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