Php 对非对象调用成员函数exec()

Php 对非对象调用成员函数exec(),php,pdo,Php,Pdo,致命错误:对第147行/home/harold/public_html/news/index.php中的非对象调用成员函数exec() 我完全被难住了。我已经做了三天了。我不是最好的开发人员,因此非常感谢您的帮助。我不确定代码第147行是哪一行,但似乎您在这些行中遇到了问题: <?php $db = new PDO('mysql:host=localhost;dbname=dbname;charset=UTF-8', 'user', 'password'); $db->setAttr

致命错误:对第147行/home/harold/public_html/news/index.php中的非对象调用成员函数exec()


我完全被难住了。我已经做了三天了。我不是最好的开发人员,因此非常感谢您的帮助。

我不确定代码第147行是哪一行,但似乎您在这些行中遇到了问题:

<?php
$db = new PDO('mysql:host=localhost;dbname=dbname;charset=UTF-8', 'user', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
if(!ctype_digit($_GET['id']))
{
  echo 'A news ID is required to access this page. <a href="/index.php">Return</a>';
}
else
{
  $article = $sql = "SELECT `title`,`content`,`date` FROM `news` WHERE `id` = ?";

  $q = $db->prepare($article);
  $query->execute($article);

  return $query;
?>
首先,变量名由于某种原因而改变。其次,您需要将ID作为传递给
execute()
的参数的数组发送(您再次传递查询)

应该是这样的:

$q = $db->prepare($article);
$query->execute($article);
$stmt = $db->prepare($article);
$success = $stmt->execute(array($_GET['id']));
第三,当您甚至不在函数中时,在这里使用
return
。我不知道你想做什么

如果要使用语句的结果集,需要执行以下操作:

$q = $db->prepare($article);
$query->execute($article);
$stmt = $db->prepare($article);
$success = $stmt->execute(array($_GET['id']));

你能花一点时间格式化你的代码,让人们更容易阅读吗?我是一个大傻瓜,所以我可以尝试,但我认为这不会有帮助。第一步,点击你文章底部的“编辑”。第二步:使用文本输入区域顶部的格式按钮。新的没关系。欢迎现在是新的、有能力的时候了。