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

时间:2013-07-05 23:48:36

标签: php mysql pdo mysqli

我搜索了网络,到目前为止我所看到的是你可以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()。对于第二个。

有什么问题?我不能同时使用mysql_mysqli吗?还是正常的?我可以检查连接是否有效吗? (if(mysq...)

4 个答案:

答案 0 :(得分:60)

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

虽然有mysqli_close

答案 1 :(得分:12)

这里只是给出一个关于所有三个MYSQL API的一般答案:

您不能将PHP中的任何三个(mysql_*mysqli_*PDO)MYSQL API中的任何一个混合在一起,它只是不起作用。它甚至在manual FAQ

  

无法混合扩展程序。因此,例如,将mysqli连接传递给PDO_MySQL或ext / mysql 将无法正常工作

从连接到查询,您需要使用相同的MySQL API及其相关功能。

答案 2 :(得分:2)

从技术上讲,你可以根据需要使用尽可能多的单独连接,而你的问题只是由一个错字引起的 - 你只能使用一个扩展中的资源和另一个扩展中的函数,这很明显。

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

答案 3 :(得分:-3)

MySQLiMySQL更安全,无论如何现在已弃用。这就是为什么你应该坚持使用MySQLi而且你也不能混合它们,因为它们都是不同的。