因此,我确信任何在SO上常规的人都注意到,这些mysql_功能将被弃用,建议使用mysqli_或PDO改为使用.因此,我决定通过在我的代码中进行简单的查找/替换来转换到mysqli,将每个替换mysql_为mysqli_.这似乎在Dreamweaver中工作正常,我没有语法错误或任何东西.所有新mysqli_功能都是蓝色的,这意味着它们被认为是有效的功能.
但是,当我保存所有内容并运行代码时,我注意到任何与mysql有关的代码都无法运行.撤消替换解决了问题.
我的服务器可能不支持mysqli功能吗?我知道它正在运行php 5和mysql 5.是否还有其他东西需要添加到代码中?我错过了什么?
现在是切换的好时机,因为 PHP 7.0ext/mysql从核心中删除了这些函数。
考虑以下遗留代码
$res = mysql_query($sql);
Run Code Online (Sandbox Code Playgroud)
这些mysql_函数是惰性的,因为它会使用任何打开的连接。但mysqli_它不仅不是懒惰的,它是一个对象,而不是连接资源(这是mysql_connect()会返回的)。查看此处的这些行以连接到数据库
$mysqli = new mysqli('host', 'username', 'password', 'db');
$mysqli = mysqli_connect('host', 'username', 'password', 'db');
Run Code Online (Sandbox Code Playgroud)
他们都给你同样的东西......
返回一个表示与 MySQL 服务器的连接的对象。
恩,那就对了。甚至过程连接函数也返回一个对象。最简单的使用方法是直接使用对象形式
$mysqli->query($sql);
Run Code Online (Sandbox Code Playgroud)
过程函数只是对此的包装。但他们并不懒惰。查看差异
mysqli_query($mysqli, $sql);
Run Code Online (Sandbox Code Playgroud)
其中最大的问题(为什么简单的查找和替换会mysql_失败mysqli_)是大多数mysqli_函数要求您将连接对象作为第一个参数传递。同样重要的是要注意,结果也是对象(mysqli_result类),尽管它们的过程对应项只需要结果集,因此您可以简单地查找/替换它们。
为了完整起见,还有另一个不太常见的问题(这确实是旧代码):mysql_result。该函数在 中没有等效函数mysqli_。您应该切换到完整行返回函数,例如mysqli_fetch_assoc($result)