Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在PHP中混合使用MySQL API吗?_Php_Mysql_Pdo_Mysqli - Fatal编程技术网

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

我可以在PHP中混合使用MySQL API吗?,php,mysql,pdo,mysqli,Php,Mysql,Pdo,Mysqli,我已经在网上搜索过了,到目前为止,我看到的是,你可以一起使用mysql\u和mysqli\u,意思是: <?php $con=mysqli_connect("localhost", "root" ,"" ,"mysql"); if( mysqli_connect_errno( $con ) ) { echo "failed to connect"; }else{ echo "connected"; } mysql_close($con); echo "Done"; ?&g

我已经在网上搜索过了,到目前为止,我看到的是,你可以一起使用
mysql\u
mysqli\u
,意思是:

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

if( mysqli_connect_errno( $con ) ) {
    echo "failed to connect";
}else{
    echo "connected";
}
mysql_close($con);
echo "Done";
?>
对于第一个和相同的,除了使用
mysqli\u close()
。第二个


有什么问题?我不能同时使用mysql和mysqli吗?还是正常?这是我检查连接是否有效的方法吗?(如果(mysq…)

否,您不能同时使用
mysql
mysqli
。它们是独立的API,它们创建的资源彼此不兼容


不过,还有一个
mysqli\u close

mysqli
比现在被弃用的
MySQL
安全得多。这就是为什么您应该坚持使用
MySQLi
,并且不能将它们混合使用,因为它们是不同的。

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

您不能将PHP中的三个(,)MYSQL API中的任何一个混合在一起,它就是不起作用。甚至在:

不可能混合使用扩展名。因此,例如,将mysqli连接传递到PDO_MySQL或ext/MySQL将不起作用


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


从技术上讲,您可以使用任意多个独立的连接,而您的问题仅仅是由输入错误造成的-您只能将一个扩展的资源与另一个扩展的功能结合使用,这一点非常明显


但是,您应该避免来自同一脚本的多个连接,无论是来自单个API还是不同的API。因为这将加重数据库服务器的负担并耗尽其资源。因此,虽然技术上可以,但除了短期的重构外,不应该在代码中混合使用不同的扩展。

mysql已被弃用,它们不能一起工作才有意义。你为什么要这么做呢?你应该避免使用
mysql.*
函数。它们容易出错且不安全,很快就会从PHP中删除(目前它们被标记为已弃用)。[这个很好的答案][0]更详细地解释了它们为什么不好。[0]:1)你坚持使用一个旧的劣质接口(mysql),该接口从亿万年以来就在文档中被标记为过时2)出于某种奇怪的原因,你想将其与后续接口混合使用,而不是做正确的事情并转换为新接口3)你非常惊讶它不起作用,以至于你问了这么多,虽然很明显你所做的是胡说八道,但这不是迷信。当然,您可以使用
mysqli.*
函数编写坏代码,使用
mysql.*
函数编写好代码。但后一类被标记为已弃用,因为它是一组较低级的函数,无法支持OO风格的调用,甚至无法支持准备好的语句(仅举两个例子)。如果有两种工具可以选择做同样的工作,其中一种从长远来看显然更好,而且更灵活,那么正确的答案不是显而易见的吗?当然不是。但是,如果您可以在不推荐的功能和积极支持的功能之间进行选择(例如,滚动您自己的抽象),那么为什么要使用旧的功能呢;当对象不再在任何地方被引用时,它们会自行清理。(不确定普通的旧资源是否能做到这一点,但对象实际上可以在相当程度上利用RAII。)@cHao不仅如此,而且PHP会在脚本退出时关闭任何打开的MySQL连接,但根据我的经验,并非总是这样,所以我们总是在文件的底部放置一个关闭按钮。虽然这可能是个好主意,但是连接池就是为此而开发的。当您有多个web请求访问一个web服务器时,您无法轻松使用同一个连接,因此需要打开一个新连接。连接池节省了应用服务器和数据库的开销。今天有人试图告诉我,他们将
mysql\u real\u escape\u string()
与其他代码PDO混合使用时没有问题/错误。有什么是我在使用这些不同的API时没有学到的吗?我是这里的无知者吗?这是针对“现在已删除”的问题,如果有人想知道的话,只有10K+会员才能看到。这与
$stmt3->execute(数组('classID'=>$\u POST['class'],'studentID'=>mysql\u real\u escape\u string($substr))
-我在这里遗漏了什么吗?@Fred ii-你说得对:)阅读你的节目。可能发生的是,这将为OP工作。所以它只是建立了连接以获得角色集。所以OP有两个连接如果OP至少告诉我/我们他们可能有两个独立的连接,我可能会同意;他们决定不这样做。然而,我仍然不知道这将如何继续工作。如果是这样的话,我很困惑。@Fred ii-请看:它将使用默认的连接设置,这是通过
ini\u get()
获得的。所以它可能只适用于带有默认设置的OP。我会把它放下,去买些新咖啡(☕☕☕).您可能想添加一些关于
sqlsrv\u query()
的内容。我刚刚结束了一个问题
<?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