簡體   English   中英

sql插入語句有時可以正常工作

[英]sql insert statement sometimes working other times not working

我正在構建一個應用程序,而我遇到了一個奇怪的問題,即有時sql語句將起作用,而下一次調用完全相同的sql語句將根本不起作用。

我個人懷疑它的托管服務提供商Im使用的速度可能不夠快,無法接受對數據庫的大量sql調用,但我想我至少會問一下是否有人遇到過類似問題

可能是您動態添加到查詢語句中的值。 您應該轉義這些值以確保它們不會破壞您的查詢。

在PHP中,您可以使用mysql_escape_string()函數。 此處的文檔: http : //us3.php.net/mysql_escape_string

另外,如果您正在通過瀏覽器運行查詢,則執行以下操作通常可以看到錯誤:

$query = mysql_query("QUERY", $db_connection) or trigger_error(mysql_error());

如果您在共享主機上並且無法修改數據庫的my.cnf文件,假設您無權訪問mysql一般查詢日志,則可以按照以下方式編寫函數:

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進程。 您可能需要調整它,甚至可能使它運行每個查詢,而不僅僅是您想插入的查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM