2014-04-23 134 views
1

我需要幫助解決一個連接到我的數據庫並得到我想要的問題。我之前已經在php中編程,並且從未遇到過這個問題。我收到此錯誤消息。我的頁面出現mysql錯誤

您的SQL語法錯誤;檢查對應於您的MySQL服務器版本的手冊,以便在第1行使用「字符WHERE用戶名=大衛」附近的正確語法。

這是我的代碼。

<?php 
     $con = mysqli_connect("localhost","root","","thespianassistant"); 
     $username = $_GET['username']; 
     $query = "SELECT * FROM `character` WHERE `username` = $username"; 
     $data = mysqli_query($con, $query) or die(mysqli_error($con)); 
    ?> 
+5

需要引用字符串「」 - 除了這個,你的系統很容易受到SQL注入攻擊,以及您使用的是過時的功能集 - 你應該使用任何PDO或mysqli的 – Trent

+0

你的意思報價$用戶名? – user3566592

+1

強制性建議,[**不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再被維護[並且被正式棄用](http://j.mp/XqV7Lp)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 –

回答

1

這是一個使用PDO也許這將是您所感興趣的代碼的端口,不要使用舊mysql_ *函數。

<?php 
//connect to database using PDO 
try{ 
    $db = new PDO('mysql:host=localhost;dbname=thespianassistant', 'root', 'you_should_set_a_password'); 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

    //Query the db & fetch result 
    $sql = "SELECT * 
      FROM `character` 
      WHERE username = :username"; 

    $query = $db->prepare($sql); 
    $query->execute(array(':username' => $_GET['username'])); 

    $result = $query->fetchAll(PDO::FETCH_ASSOC); 

}catch(PDOException $e){ 
    die($e->getMessage()); 
} 

//do something with result 
if(!empty($result)){ 
    echo '<pre>'.print_r($result, true).'</pre>'; 
}else{ 
    //no character found 
} 
+0

謝謝!另外,我有一個密碼。哈哈,我只是不想分享它。再次感謝@LozCherone – user3566592

+0

np,它可能沒有pw的安裝,這就是爲什麼我說,雖然注意到PDO的建議,但我通常喜歡大多數其他人不會幫助OP的,如果使用'mysql_ *'你只是得到spammy-for - 好的理由評論告訴移動到PDO或mysqli。祝你好運 –

+0

謝謝@LozCherone我已經開始學習PDO。 – user3566592