调用未定义的函数mysql_result()

时间:2018-05-13 18:32:40

标签: php mysql

我正在尝试使用地址栏中的get参数将数据插入到mysql中。 我的esp.php文件包含以下代码:

$id = ($_GET['id']); 
$temp = ($_GET['t']);
$hum = ($_GET['h']);     
if ($id == '1') {
        $total = mysql_result(mysql_query("SELECT count(*) FROM `esp1`"),0);
        mysql_query("INSERT INTO `esp1` (temp,hum) values ('".$temp."','".$hum."') ");
    }

当我访问网址时出现此错误:

Fatal error: Uncaught Error: Call to undefined function mysql_result() in /home/orexlt/domains/ortex.lt/public_html/esp.php:13 Stack trace: #0 {main} thrown in /home/orexlt/domains/ortex.lt/public_html/esp.php on line 13

我做错了什么?

1 个答案:

答案 0 :(得分:0)

这是一个非常奇怪的错误。

mysql_ *函数是PHP现已弃用的扩展的一部分。但它可能是在一个平台上运行,该平台仍然提供对扩展的支持,并且不支持其替换 - mysql i 扩展(例如Redhat / Centos / Scientific Linux 6)。

你应该告诉我们不正确的操作系统和PHP版本是什么。

正如预期的那样,通常的巨魔说你应该使用PDO。我还没有在mysql或mysqli扩展中看到任何可靠的安全问题证据。当然,PDO进一步阻止你做真正愚蠢的事情 - 但它也关闭了SQL中其他有用结构的大门(如可变长度IN(...)列表或关键字搜索)。 OTOH如果你将你的节目分包给那些积极尝试向你的网站注入后门的人,你可能想要read this - 但他们在找到破坏你网站的其他方法方面没什么问题。

从已弃用的mysql扩展更改为过程mysql i 扩展可以使用垫片或脚本搜索来完成并替换您的代码。更改为PDO将需要手动重写所有数据库交互。

因此,错误的原因是您编写的代码与PHP安装可用的扩展名不匹配。要查找可用的扩展,请查看phpinfo();的输出。如果需要,如何安装和启用扩展取决于您的平台以及您是否有能力进行配置。你可能已经有了mysqli扩展名。

但即使你有mysql扩展可用,这段代码也行不通。在建立连接之前,你不能对数据库做任何事情 - 这是对mysql扩展的单独函数调用(在PDO中,在程序mysqli中)。