有人可以告诉我为什么第一个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条件匹配的行数
答案 0 :(得分:1)
删除quote_smart()
函数,不推荐使用的mysql_函数,并使用PDO prepared statements instead。这应该可以解决您的问题,同时提高代码库的安全性和质量。
有一个标准的评论可以提供更多细节,特别是最后查看PDO教程:
请不要将mysql_ *函数用于新代码。它们已不再维护,社区已开始deprecation process。查看 red box ?相反,您应该了解prepared statements并使用PDO或MySQLi。如果您无法决定,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()