2010-04-04 38 views
0

每個搜索查詢被保存在我的數據庫,但我想限制Chracterlength爲一個字限制字長:odisafuoiwerjsdkle - >長太多 - >不寫數據庫MYSQL:對於MySQL插入

我的實際代碼是:

$search = $_GET['q']; 


    if (!($sql = mysql_query ('' . 'SELECT * FROM `history` WHERE `Query`=\'' . $search . '\''))) { 
     exit ('<b>SQL ERROR:</b> 102, Cannot write history.'); 
     ; 
    } 

    while ($row = mysql_fetch_array ($sql)) { 
     $ID = '' . $row['ID']; 
    } 

    if ($ID == '') 
    { 
     mysql_query ('' . 'INSERT INTO history (Query) values (\'' . $search . '\')'); 
    } 

    if (!($sql = mysql_query ('SELECT * FROM `history` ORDER BY `ID` ASC LIMIT 1'))) 
    { 
     exit ('<b>SQL ERROR:</b> 102, Cannot write history.'); 
     ; 
    } 

    while ($row = mysql_fetch_array ($sql)) { 
     $first_id = '' . $row['ID']; 
    } 

    if (!($sql = mysql_query ('SELECT * FROM `history`'))) 
    { 
     exit ('<b>SQL ERROR:</b> 102, Cannot write history.'); 
     ; 
    } 
+1

爲什麼在空白行和''後面有';'。 '在查詢之前?此外,除非以某種方式將$搜索以未顯示的方式處理,否則您很容易受到SQL注入的攻擊。 – zneak 2010-04-04 18:15:50

回答

0

一個選項是在表中使用觸發器。但是,如果您期望在搜索引擎上獲得大量流量,則可能無法很好地擴展。所以,使用客戶端(在你的情況下PHP)約束可能是一個更好的選擇。

+0

謝謝你的回答,你有什麼好方法嗎?或如何做到這一點與PHP? – elmaso 2010-04-04 18:24:52

+0

'if(strlen($ search)> 20){exit('Search string too long');}' – cmptrgeekken 2010-04-04 18:49:54