【问题标题】:Fatal error: Call to a member function escapeString() on a non-object in C:\xampp\htdocs\results.php on line 17致命错误:在第 17 行的 C:\xampp\htdocs\results.php 中的非对象上调用成员函数 escapeString()
【发布时间】:2012-03-26 21:58:07
【问题描述】:

错误:

致命错误:在第 17 行对 C:\xampp\htdocs\results.php 中的非对象调用成员函数 escapeString()

第 17 行:

$searchterm=$db->escapeString($_GET['searchterm']);

在mysql.php中调用

public function escapeString($value){

return mysql_escape_string($value);

}

我在本地主机上使用 MySQL。

【问题讨论】:

  • 确保$db 确实是一个对象,因为错误消息指出它不是。
  • 确实如此。这是数据库名称。
  • 请注意,mysql_escape_string 已被弃用,您应该改用mysql_real_escape_string()。 m_e_s() 容易受到字符集操作的影响,并且可能允许注入攻击泄漏。
  • 我添加了 mysql_real_escape_string,它仍然可以。

标签: php mysql


【解决方案1】:

您的 $db 变量设置不正确。可能是连接失败或出现其他问题。

在 17 点之前做这个:

var_dump($db); exit;

它可能是 null 或 false 或其他一些表明连接失败的非对象值。为了提供更多帮助,我们需要更多地了解您尝试建立的数据库连接(mysql、mysqli、PDO 等)。

【讨论】:

  • 现在弹出:NULL。它是 MySQL。
  • @Ethan 这意味着变量是null,而不是您期望的对象。如果没有看到更多代码,我们无法告诉您如何解决这个问题。
  • @Ethan:您在 pastebin 下面粘贴的代码似乎表明您正在连接并将其设置为 $con,然后使用 $db 并在其上调用方法。看来您正在混合来自过程 mysql_* 东西和面向对象的东西的数据库代码。 mysql.php的内容是什么?
  • @Ethan:类 (MySQL) 的构建方式存在一些严重问题。那里没有任何东西真的可以帮助你,至少现在不是这样。 pastebin to mike 中的代码和上面的代码似乎与第 17 行的代码不匹配。没有添加更多方法,MySQL 类是无用的。除非您知道如何使 MySQL 类有用,否则我会查看 mysql_query (php.net/mysql_query) 并直接使用它和 mysql_real_escape_string。我认为这超出了这个问题的范围。
【解决方案2】:

这将帮助您避免错误:

if ( is_object($db) && isset($_GET['searchterm']) ) {
  $searchterm=$db->escapeString($_GET['searchterm']);
}

如果您在设置上述项目之一时遇到问题,我们将需要更多代码。

【讨论】:

  • 您还需要什么?我的全部结果.php:pastebin.com/REBrqzLY
  • @Ethan 你的$db 变量应该来自哪里?
  • @deceze 实际上,它不是来自任何地方。我会在命令中声明什么? $db = ??;
  • @Ethan 我认为您需要回归基础并尝试真正了解您在做什么。一方面,您使用旧的mysql_ 函数连接到数据库,另一方面,您似乎有一些您从未实例化 的数据库类。请遵循一个体面的教程或书籍,连贯地解释所有内容,不要混搭。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-26
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多