Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php mysql查询,整数为值错误_Php_Mysql_Pdo - Fatal编程技术网

php mysql查询,整数为值错误

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查询可以工作,但是第二个查询抛出了一个错误。我一直无法找出整数值导致其中断的原因

作品:

$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
。我不准备详细说明为什么会出现这个错误;这将是一个很好的新问题。我认为删除该声明应该是避免它的一个足够的解决方案。