[英]MySQL SELECT statement using PHP GET variable
我有一個生成MySQL select語句的PHP腳本:
從單詞=“經典”的單詞中選擇*
單詞表中恰好有一個單詞,其可變單詞等於Classic。
當我的PHP頁面執行時,查詢沒有任何結果。 如果我回顯用於執行查詢的字符串,然后將其剪切並粘貼到數據庫中PHPMyAdmin的SQL窗口中,則也不會得到任何結果。 但是,如果我在PHPMyAdmin的SQL窗口中重新鍵入EXACT字符串(使用相同的引號),則會得到一行正確的結果。
select語句中的Classic是從PHP GET獲得的(請參見下面的代碼)。 我可以回顯$ word變量,並獲得“經典”的正確結果。 我究竟做錯了什么?
這是我的代碼:
<?php
require ('dbconnect.php');
$word = $_GET["word"];
$selectStr = "SELECT * FROM words WHERE word = '" . $word . "'";
if ($results = MySQL($dbName, $selectStr))
{
$rowCount = MySQL_NUMROWS($results);
}
$resultRow = MYSQL_FETCH_ROW($results);
$wordID = $resultRow[0];
?>
拜托,拜托,請清理這個詞。 mysql_real_escape_string()
應該可以解決問題。
$selectStr = "SELECT * FROM words WHERE word LIKE '" . $sanitized_word_i_promise . "'";
應該管用 :)
只是為了解釋:“ =”應該適用於完全匹配。 這包括大寫/小寫,空格等。在查詢中使用結果之前,您可能還應該先修剪該結果。
如果您將foo
存儲在數據庫中(請注意末尾的空格)-如果沒有空格,它將與foo
不匹配。 您可能需要使用LIKE 'foo%'
。
無論哪種方式,Sourabh都是正確的,盡管從性能角度來看,這在嘗試匹配精確字符串時並不是一個大問題,但您應該首先在其他位置查找問題(例如,數據庫中的項目是否完全匹配?) 。
首先,您不應接受任何用戶輸入並將其直接輸入到查詢中而不進行消毒或使用准備好的語句。
現在我們已經解決了這個問題:您是否嘗試過使用變量和您寫入的字符串執行strcmp()? 如
echo strcmp($ _ GET ['word'],“經典”)
如果您得到的結果不是0,則意味着它們不相同,很可能$ _GET變量中會有某種空格。 在其上使用trim()
取出空白。 也可能是區分大小寫的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.