2011-06-25 149 views
1

在建立一个应用程序和我有一个奇怪的问题,有时一个SQL语句将工作,并在下一次调用完全相同的SQL语句根本不会工作。SQL插入语句有时工作其他时间不工作

我个人怀疑它的托管服务提供商,即时通讯使用,也许只是没有足够快,接受大量的SQL调用数据库的,但我想我会ATLEAST问问看是否有人有过类似的问题

+1

你真的需要给我们更多关于这方面的信息。例如,你正在运行的查询,你的表结构,你的定义“不起作用”(即抛出错误,失败等)。 –

+0

你得到的错误是什么? – Sudantha

+0

这是我运行的查询,非常标准,并且在大多数时候运行正常时运行mysql_query(“INSERT INTO tweets VALUES('','$ id','$ twtid','','$ twtsrc','$ inreplyto_id ”, '$ inreplyto_screenname', '$ twtext', '$ pbuid', '$ pbrname', '$ pbsname', '$ pbprfpic')“); –

回答

1

它可能是您动态添加到查询语句的值。您应该避开这些值,以确保它们不会破坏您的查询。

在PHP中,您可以使用mysql_escape_string()函数。文档浏览:http://us3.php.net/mysql_escape_string

此外,如果你正在运行从浏览器的查询,就可以正常看到的错误,如果你做这样的事情:

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

我想你可能是对的,这里是我能够检索到的错误:你的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,在'EM WHY YOU MAD,SON'附近使用正确的语法。告诉'EM为什么你疯了!','23883319','cabbie richards','therea'在线1 –

+0

现货!谢谢您的帮助! –

0

假设你没有访问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的值,它将不会登录到该文件,并且将完全跳过谁的fopen进程。你可能需要调整它,甚至可以让它运行每一个查询,而不是只要你想要插入。