Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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 MySQLi致命错误:对中的非对象调用成员函数fetch_array()_Php_Mysql_Sql_Mysqli - Fatal编程技术网

PHP MySQLi致命错误:对中的非对象调用成员函数fetch_array()

PHP MySQLi致命错误:对中的非对象调用成员函数fetch_array(),php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,正在获取此错误,但不确定发生了什么。使用mysqli的新手 $query = 'SELECT name, email FROM US__users WHERE state="' . $state . '" ORDER BY zip ASC LIMIT 5'; $result = $mysqli->query($query); while ($row = $result->fetch_array()) { print ($row['name'] . ' ' . $row['ema

正在获取此错误,但不确定发生了什么。使用mysqli的新手

$query = 'SELECT name, email FROM US__users WHERE state="' . $state . '" ORDER BY zip ASC LIMIT 5';
$result = $mysqli->query($query);

while ($row = $result->fetch_array()) {
  print ($row['name'] . ' ' . $row['email']);
}

$result->free();

MySQL数据库中目前只有一行。但是,当我复制$query并在mysql命令提示符下运行它时,它会很好地查询并显示一个结果。

由于

state="' $state '"
尝试

$query = "SELECT name, email FROM 
users WHERE state='$state' ORDER BY zip ASC LIMIT 5";

查询字符串在语法上不正确。你有这个:

$query = 'SELECT name, email FROM users WHERE state="' $state '" ORDER BY zip ASC LIMIT 5';
请尝试使用允许字符串替换的双引号:

$query = "SELECT name, email FROM users WHERE state='$state' ORDER BY zip ASC LIMIT 5";
或者,如果出于某种原因希望串接字符串中的值:

$query = "SELECT name, email FROM users WHERE state='" . $state . "' ORDER BY zip ASC LIMIT 5";
如果您仍然有问题,另一个想法是使用预先准备好的语句方法;您永远不知道状态是否需要过滤。所以试试这个

$query = "SELECT name, email FROM US__users WHERE state=? ORDER BY zip ASC LIMIT 5";

$stmt = $mysqli->prepare($query);

$stmt->bind_param('s', $state);

$result = $stmt->execute();

$stmt->close();

while ($row = $result->fetch_array()) {
  print ($row['name'] . ' ' . $row['email']);
}

$result->free();

查询定义中缺少连接:

$query = 'SELECT name, email FROM users WHERE state="' . $state . '" ORDER BY zip ASC LIMIT 5';
有关更多信息,请查看以下链接:
这可能是一个PHP错误?只是面对同样的问题。所以它并没有像你所希望的那样为未来的人们工作,像我这样的人将在寻找答案:while$row=$result->fetch_array{。但是由于某种原因,它的工作方式看起来很难看

$query = 'SELECT name, email FROM US__users WHERE state="' . $state . '" ORDER BY zip ASC LIMIT 5';

while ($row = $mysqli->fetch_array($query)) {...


该查询在语法上并不错误,但构建该查询的连接是。这使得它在语法上不正确result@sudowned语义上的小问题,但我将其更改为查询字符串在语法上不正确。@JakeGould调用非对象上的成员函数bind_paramin@user3727412如果是这样的话,你知道吗有mysqli连接发生吗?$mysqli=new mysqli'localhost',username',password',database';?值得一提的是,PHP不应该走这么远-它应该在省略concat运算符的语法错误处终止。我忘了放置连接。我编辑了我的第一篇文章。但作者似乎没有这个专业问题。有什么想法吗?@user3727412如果连接不是问题所在,那么您的SQL查询中可能存在某种错误。您报告的主要错误是因为查询调用没有生成您期望的结果。但是查询在mysql和phpmyadmin中工作。那么为什么它在这里不工作?仍然有错误。是因为表名称有一个双下划线?没有双下划线应该不是问题。如果你也留下一个原因,那就好了。好的,那么我不知道为什么我仍然会出错。你确定你连接到mysql吗?在执行查询之前检查它是否连接到mysql。是的,我将$host更改为$hst,并且我看到了连接错误。你是应该使用带有占位符的准备好的语句,并将变量绑定到此占位符。这将解决您的错误和sql注入漏洞。该变量来自另一个php文件,而不是用户可以设置的内容。每个文件都有$state=;并且根据它们使用的文件,在该文件中填充$state变量所以我不认为这是SQL注入的原因。这不是不使用预处理语句的原因。还有其他问题。错误检查在哪里?