0

有人可以告诉我为什么第一个 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 条件的行数

4

3 回答 3

1

删除您的quote_smart()函数,已弃用的 mysql_ 函数,并改用PDO 准备语句。这应该可以解决您的问题,同时提高代码库的安全性和质量。

有一个标准注释对此提供了更多详细信息,特别是最后查看 PDO 教程:

请不要将 mysql_* 函数用于新代码。它们不再被维护并且社区已经开始了弃用过程。看到红框了吗?相反,您应该了解准备好的语句并使用PDOMySQLi。如果你不能决定,这篇文章将有助于选择。如果你想学习,这里有很好的 PDO 教程

于 2012-08-18T22:56:26.767 回答
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像这样引用

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

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

于 2012-08-18T22:47:45.170 回答
0

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

于 2012-08-18T22:50:09.150 回答