2013-08-17 75 views
1

我一直在用這個問題絞盡腦汁,在每次搜索Google和Stack Overflow一百次之後,我決定直接詢問它。MySQL選擇...哪裏子句返回語法錯誤

我試圖做一個頁面,使用PHP和MySQL來搜索數據庫,因爲用戶鍵入關鍵字。我已經使用了幾個關於這個主題的教程,並且他們都顯得前衛而且簡單,但是對於我遇到的麻煩並沒有給出任何預測。

當我使用「SELECT * FROM charlist」時,它將返回所有行,因爲它應該如此。但是當我使用「SELECT * FROM charlist WHERE Character ='」。 $字符。 「'」,我得到以下錯誤:

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= 'X'' at line 1

X是無論用戶鍵入和空白如果沒有在輸入

我在做什麼錯?

下面是完整的代碼:

<?php 
$con = mysqli_connect("xxxx", "xxxxxxxx", "xxxxxxx", "xxxxxxxxxx"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysqli_error($con)); 
    } 
$character = $_POST[character]; 
mysqli_select_db($con, "xxxxxxxx"); 

$sql = "SELECT * FROM charlist WHERE Character = '" . $character . "'"; 

$result = mysqli_query($con,$sql); 
if (!$result) { 
    printf("Error: %s\n", mysqli_error($con)); 
    exit(); 
} 

echo "<table border='1'> 
<tr> 
<th>Character</th> 
<th>Player</th> 
</tr>"; 

while($row = mysqli_fetch_array($result)) 
{ 
    echo '<tr style="border-color:#'; 
    echo $row[Color]; 
    echo ';">'; 
    echo '<td style="border-style:solid;border-width:3px;"><a href="'; 
    echo $row[url]; 
    echo '">'; 
    echo $row[Character]; 
    echo '</a></td>'; 
    echo '<td>'; 
    echo $row[Player]; 
    echo'</td>'; 
    echo '</tr>'; 
} 
echo '</table>'; 

mysqli_close($con); 
?> 
+0

如果您現在要使用$ character = $ _POST ['character'];那麼你可以刪除這一行並寫入提取($ _ POST); –

回答

0

嘗試使用轉義$字符:

$ SQL = 「SELECT * FROM charlist WHERE字符=「」。 mysqli_real_escape_string($字符)。 「'」;

如果在字符名稱中有引號中斷查詢。

0

使用查詢作爲

"SELECT * FROM charlist WHERE Character ='$character'" 
+2

請解釋這與OP目前使用的有何不同? –

+0

php會用雙引號內的變量替換前綴爲$的單詞,這裏字符要匹配,我們需要單個代碼。所以裏面單引號的變量值 –

1

改變這一行

$character = $_POST[character]; 

$character = $_POST['character']; 

,你應該throught

+0

這沒有幫助,不幸的是。如果我可以在沒有任何問題的情況下回復張貼的信息,那麼使用「[人物]」仍然會出錯? – Yaniv

0

開啓PHP錯誤報告會幫助:

$character = $_POST[character]; 
//  -----------^--------^ 

應該是:

$character = $_POST['character']; 

而且,直接插入變量到你的查詢是一個非常不好的做法,讓您的網站受到SQL注入攻擊。始終小心處理用戶輸入!

$sql = mysqli_real_escape_string($con, $sql); 

希望這有助於!

+0

更改並未阻止該錯誤。另外,儘管我把它寫成「[character]」,但它仍然抓住了POST信息。我可以迴應它沒有問題。麻煩是試圖讓sql選擇它。 – Yaniv