php mysql查询用整数作为值错误

时间:2012-08-18 22:33:34

标签: php mysql pdo

有人可以告诉我为什么第一个sql查询有效但第二个抛出错误。我无法找出整数值导致它破裂的原因。

使用:

$SQL = "SELECT * FROM Users WHERE userName = $uname AND pass = $pword";

错误:

$SQL = "SELECT * FROM Users WHERE userName = $uname AND firstLogin = 1";

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 'AND firstLogin = 1' at line 1

如果还有一些额外的启示,你必须全心全意地提供。

编辑显示功能连接使用PDO:

<?php
    $uname = "userNameToSearchBy";

//PDO connection string 
    $user_name = "dbUsername";
    $pass_word = "dbPass";
    $database = "sdName";
    $server = "dbServer";
    $db = new PDO("mysql:host=".$server.";dbname=".$database.";", $user_name, $pass_word);
    $stmt = $db->prepare("SELECT * FROM Users WHERE userName=? AND firstLogin=?");
    $stmt->execute(array($uname, 1));
    //Returns the rows from thge database that match the query
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    //Shows the number of rows returned
    $message = $stmt->rowCount();   
?>
<body>
<?php echo $message ?>
</body>

输出与sql条件匹配的行数

3 个答案:

答案 0 :(得分:1)

删除quote_smart()函数,不推荐使用的mysql_函数,并使用PDO prepared statements instead。这应该可以解决您的问题,同时提高代码库的安全性和质量。

有一个标准的评论可以提供更多细节,特别是最后查看PDO教程:

  

请不要将mysql_ *函数用于新代码。它们已不再维护,社区已开始deprecation process。查看 red box ?相反,您应该了解prepared statements并使用PDOMySQLi。如果您无法决定,this article将有助于选择。如果您想学习,here is good PDO tutorial

答案 1 :(得分:0)

尝试回显你的sql语句

$SQL = "SELECT * FROM Users WHERE userName = $uname AND firstLogin = 1";
echo($SQL);

$uname可能有问题。如果它是空的,你得到

$SQL = "SELECT * FROM Users WHERE userName = AND firstLogin = 1";

有语法错误。

你也可以在$uname这样引用{/ p>

$SQL = "SELECT * FROM Users WHERE userName = '$uname' AND firstLogin = 1";

如果$uname也有单引号,那也会导致问题

答案 2 :(得分:0)

尝试引用$ uname ...或将值传递给mysql_real_escape()