-1

如何解决以下错误?

致命错误:在第 27 行的 index.php 中的非对象上调用成员函数 fetch_assoc() 调用堆栈:0.0000 644064 1. {main}() index.php:0

这是我到目前为止运行的代码:

$sql = 'SELECT * FROM pm_user WHERE name='.$_SESSION['pmname'].'';
$result = $pdo->query($sql);
$row = $result->fetch_assoc(); // line 27
echo $row['img'];

提前致谢

4

2 回答 2

5

问题是:

  • 您正在查询中插入一个值。这是不好的和错误的。您应该改用 PDO 的预处理语句功能。

  • 在进行这种错误插值的过程中,您忘记添加字符串引号,使您的 SQL 查询无效。

  • 您没有对;进行任何错误检查 失败->query()时,它会返回,因此您尝试在.query()FALSE->fetch()FALSE

修复所有这些东西。

于 2013-02-01T23:55:23.397 回答
1

当您在程序中出现错误时,请检查您调用的所有函数的返回值

// use quote or prepared statements to prevent from 
// SQL injection attacks!
$pmname = $pdo->quote($_SESSION['pmname']);
$sql = "SELECT * FROM pm_user WHERE name=$pmname";

$result = $pdo->query($sql);
if($result === FALSE) {
    echo 'oops! the query failed! ';
    print_r($pdo->errorInfo());
}

$row = $result->fetch_assoc();

if($row) {
    echo $row['img'];
} else {
    echo 'the query return no records :(';
}

此外,您应该考虑display_errors=1 在开发期间设置 php.ini 指令以查看 php 错误消息而不是“白屏”。您还可以使用以下代码行为每个脚本启用它:

ini_set('display_errors', 1);
于 2013-02-01T23:49:54.267 回答