我可以在 PHP 中混合 MySQL API 吗?

我已经搜索了网络,到目前为止,我看到的是,你可以使用 mysql_mysqli_一起意味着:

<?php
$con=mysqli_connect("localhost", "root" ,"" ,"mysql");


if( mysqli_connect_errno( $con ) ) {
echo "failed to connect";
}else{
echo "connected";
}
mysql_close($con);
echo "Done";
?>

或者

<?php
$con=mysql_connect("localhost", "root" ,"" ,"mysql");
if( mysqli_connect_errno( $con ) ) {
echo "failed to connect";
}else{
echo "connected";
}
mysqli_close($con);
echo "Done";
?>

是有效的,但是当我使用这个代码时,我得到的是:

Connected
Warning: mysql_close() expects parameter 1 to be resource, object given in D:\************.php on line 9
Done

对于第一个和相同的除了与 mysqli_close()。对于第二个。

What is the problem? Can't I use mysql_ and mysqli together? Or is it normal? Is the way I can check if the connections are valid at all? (the if(mysq...))

16664 次浏览

不,你不能同时使用 mysqlmysqli。它们是独立的 API,它们创建的资源彼此不兼容。

不过还是有 mysqli_close的。

MySQLiMySQL安全得多,而 MySQL现在已经被弃用了。这就是为什么你应该坚持使用 MySQLi,而且你也不能混用它们,因为它们都是不同的。

这里只是给出一个关于所有三个 MYSQL API 的一般性答案,并提供一个参考:

你不能把三个(mysql_*mysqli_*PDO) MYSQL API 中的任何一个从 PHP 混合在一起,它就是不起作用。甚至在 manual FAQ中也有:

It is not possible to mix the extensions. So, for example, passing a mysqli connection to PDO_MySQL or ext/mysql 没用的.


从连接到查询,您需要使用相同的 MySQLAPI 及其相关函数。

从技术上讲,您可以使用任意多个单独的连接,而您的问题仅仅是由于输入错误造成的——您只能使用来自一个扩展的资源和来自另一个扩展的函数,这是非常明显的。

但是,您的 应该避免来自同一个脚本的多个连接,无论是从单一的 API 或不同的。因为它会加重数据库服务器的负担并耗尽其资源。因此,尽管从技术上讲您可以这样做,但是您不应该在代码中混合使用不同的扩展,除非进行短时间的重构。