2014-04-23 89 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