SQL оператор вставки иногда работает, а иногда не работает - PullRequest
1 голос
/ 25 июня 2011

Я создаю приложение, и у меня возникла странная проблема, когда иногда SQL-оператор будет работать, а следующий же вызов точно такого же SQL-оператора просто не будет работать.

Лично я подозреваю, что хостинг-провайдер, которого я использую, может быть, просто недостаточно быстр, чтобы принимать большие объемы вызовов sql в базу данных, но я думаю, по крайней мере, я спрошу, есть ли у кого-нибудь еще подобные проблемы

Ответы [ 2 ]

1 голос
/ 25 июня 2011

Это могут быть значения, которые вы динамически добавляете в оператор запроса. Вы должны экранировать значения, чтобы убедиться, что они не нарушают ваш запрос.

В PHP вы можете использовать функцию mysql_escape_string (). Документация здесь: http://us3.php.net/mysql_escape_string

Также, если вы запускаете запрос из браузера, вы обычно можете увидеть ошибку, если сделаете что-то вроде этого:

$query = mysql_query("QUERY", $db_connection) or trigger_error(mysql_error());
0 голосов
/ 25 июня 2011

Предполагая, что у вас нет доступа к общему журналу запросов mysql, если вы находитесь на общем хосте и не можете изменить файл my.cnf базы данных, вы можете составить следующую функцию:

function dbInsertQuery($query, $conn) {
     $logFile = "/path/to/file.txt";
     $isProd  = FALSE;

     // run your security checks on the query here

     $mysql_query($query, $db_connection) or trigger_error(mysql_error());

     if (!$isProd && is_writable($logFile)) {
       if (!handle = fopen($logFile, 'a')) {
         echo "cannot open dbInsertQuery's log file: " . $logFile;
         exit;
       } 

       $logLine = date(DATE_RFC822) . " - " . $query;

       if (fwrite($handle, $logLine) === FALSE) {
         echo "cannot write to dbInsertQuery's log file: " . $logFile;
         exit;
       }

       fclose($handle);
     }

   }

Это позволит вам записывать все ваши запросы в файл журнала. Я установил переменную $isProd, чтобы вы переключались на разработку, и если для нее установлено значение TRUE, она не будет регистрироваться в файле и полностью пропустит процесс who fopen. Возможно, вам придется настроить его и даже заставить его выполнять каждый запрос, а не просто вставлять, если хотите.

...