php mysql查询,整数为值错误
有人能告诉我为什么第一个sql查询可以工作,但是第二个查询抛出了一个错误。我一直无法找出整数值导致其中断的原因 作品:php mysql查询,整数为值错误,php,mysql,pdo,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 sy
$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条件的行数尝试回显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
也有单引号,这也可能导致问题尝试引用$uname。。。或者将值传递给mysql\u real\u escape()删除您的quote\u smart()
函数、不推荐使用的mysql\u函数,然后使用。这将解决您的问题,同时提高代码库的安全性和质量
有一个标准的评论提供了更多关于这方面的细节,请特别查看最后的PDO教程:
请不要在新代码中使用mysql_*函数。它们不再得到维护,社区已开始恢复。请参阅?相反,你应该学习并使用或。如果你不能决定,将帮助你做出选择。如果你想学习
你确定第一个有效吗?如果
userName
和/或pass
是任何类型的字符串,则它们需要用包围起来。这至少说明了为什么第二个不起作用,第一个示例中也存在同样的问题。表中字段firstLogin
的数据类型是什么?tinyInt(1)值可以是0或默认值1。第一行似乎没有抛出错误,代码继续使用2个if语句,这些语句使用它的输出this$SQL=“SELECT*FROM userName=”“$uname.”和pass=$pword”@boyd第一个查询似乎正在运行,并返回一个可在$num\u rows=mysql\u num\u rows($result)中使用的结果
但是只有第二个抛出errorEcho结果:SELECT*来自userName='kwolmarans'和firstLogin=1的用户
我的所有输入字段都通过这个函数:function quote\u smart($value,$handle){if(get_magic_quotes_gpc(){$value=stripslashes($value);}if(!is_numeric($value)){$value=“”””.mysql\u real\u escape\u string($value,$handle)。““;}返回$value;}
Oh。firstLogin是什么类型?另外,确保$uname在范围内。它是tinyint(1)类型,默认设置为1。quote\u smart()在空白名称上返回什么?它返回这两个字符,并带有“”字符串:'
我在一个空的.php文档中尝试这个,以确保没有其他东西妨碍:$uname=“kwolmarans”;$user\u name=“namehind”;$passwordHidden”;$database=“dbName”;$server=“kwolmara.startogicmysql.com”;尝试{$db=new PDO(“mysql:host=“.server.”dbName=“.database.”charset=UTF-8”,$user_name,$pass_word);}catch(PDO异常$ex){/}$stmt=$db->prepare(“从userName=?和firstLogin=?”的用户中选择*);$stmt->execute(array($uname,1));$rows=$stmt->fetchAll(PDO::FETCH_ASSOC);
下面是错误:致命错误:调用成员函数prepare()在第13行的/hermes/bosweb25b/b807/sl.kwolmara/public_html/test.php中的非对象上
第13行是:$stmt=$db->prepare(“从userName=?和firstLogin=?”的用户中选择*);
连接失败。您正在捕获异常,因此未显示错误详细信息。以下是未捕获的错误消息:致命错误:未捕获的异常“PDOException”,消息为“SQLSTATE[HY000][2019]无法初始化字符集UTF-8(路径:/usr/share/mysql/charset/)'in/hermes/bosweb25b/b807/sl.kwolmara/public_html/test.php:8堆栈跟踪:#0/hermes/bosweb25b/b807/sl.kwolmara/public_html/test.php(8):PDO->_构造('mysql:host=kwol…','usernamehinded','passwordHidden')#1{main}在第8行的/hermes/bosweb25b/b807/sl.kwolmara/public_html/test.php中,它显然不喜欢charset=UTF-8
。我不准备详细说明为什么会出现这个错误;这将是一个很好的新问题。我认为删除该声明应该是避免它的一个足够的解决方案。