2012-03-26 4 views
0

Если я выполняю несколько запросов mysql в одной таблице, иногда некоторые пропускают.Mysql Несколько запросов PHP, пропущенных

Почему?

Например:

<?php 
mysql_query("UPDATE `tb` SET `field` = '' WHERE `Id` = '$something'"); 
mysql_query("UPDATE `tb` SET `field2` = '' WHERE `Id` = '$something'"); 
mysql_query("UPDATE `tb` SET `field3` = '0' WHERE `Id` = '$something'"); 
?> 

Иногда один из запросов не будет выполнена?

Почему?

-О, что-то не так с моим сервером, а не с общим mysql?

(Очевидно, что я теперь знаю, чтобы обновить ту же таблицу в том же запросе, но до того, что я был очень смущен, почему это происходит, может кто-нибудь объяснить?)

Спасибо!

+0

Не могли бы вы показать нам код до и после запросов? – F21

+0

Попробуйте 'mysql_query (« ... ») или умереть (mysql_error());' для целей отладки. Бьюсь об заклад, некоторые из ваших запросов просто терпят неудачу. Интерпретатор PHP, как правило, не просто пропускает инструкции, а MySQL DBS не будет случайным образом игнорировать запросы. – Basti

+0

Попробуйте повторить 'mysql_error()' после каждого запроса для целей отладки. Это скажет вам, если что-то пошло не так с запросом –

ответ

0

отладки кода, чтобы увидеть, если запрос не удается:

$result = mysql_query("UPDATE `tb` SET `field` = '' WHERE `Id` = '$something'"); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 

$result = mysql_query("UPDATE `tb` SET `field2` = '' WHERE `Id` = '$something'"); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 

$result = mysql_query("UPDATE `tb` SET `field3` = '0' WHERE `Id` = '$something'"); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 
0

Используйте следующие отлаживать код:

mysql_query("UPDATE `tb` SET `field` = '' WHERE `Id` = '$something'") or die(mysql_error()); 
mysql_query("UPDATE `tb` SET `field2` = '' WHERE `Id` = '$something'") or die(mysql_error()); 
mysql_query("UPDATE `tb` SET `field3` = '0' WHERE `Id` = '$something'") or die(mysql_error()); 

UPDATE

Убедитесь, что вы избежать $something с помощью :

$something = mysql_real_escape_string($something); 
3

Вам не нужно сделать 3 запросов, если вы обновляете те же строки:

$q = " 
    UPDATE table 
    SET field = '', 
     field2 = '', 
     field3 = 0 
    WHERE Id = :id 
"; 
$statement = $pdo->prepare($q); 
$statement->bindParam(':id', $something, PDO::PARAM_INT); 
$statement->execute(); 

Кроме того, вы должны прекратить использовать древние mysql_* функции. Они больше не поддерживаются, а процесс для устаревания имеет already begun.

Возможно, вам стоит избегать 10+ летнего API и узнать что-то за это десятилетие: PDO Tutorial for MySQL Developers.

+0

Старый не плохо, если говорить о библиотеках. Никогда не прикасайтесь к запущенной системе. Сообщение, которое выражает желание удалить ext/mysql, почти двух лет, и я не что они даже расширили документацию примерами PDO. – Basti

+0

теперь это дух технологии !! -.- –

+2

@Basti: Старый - это плохо. Помните, что [Complacency Kills] (http://mylifeblogs.com/2011/ 10/Самодовольство-убийств /) ...Вспомните, что сказал Эйнштейн: * Мир - опасное место. Не из-за людей, которые злы; но из-за людей, которые ничего не делают с этим. * Так что да, старое плохо, и сказать * Никогда не прикасаться к бегущей системе * непрасно небрежно. Теперь примите меры предосторожности и не просто возитесь с ним без причины, но если есть причина (которая есть в этом случае), абсолютно прикоснитесь к запущенной системе ... – ircmaxell

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