Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.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 mysqli:连接、查询和效率_Php_Mysql_Sql Server_Database_Mysqli - Fatal编程技术网

Php mysqli:连接、查询和效率

Php mysqli:连接、查询和效率,php,mysql,sql-server,database,mysqli,Php,Mysql,Sql Server,Database,Mysqli,我是一个相当新的php程序员。我已经学习了几周,在这几周里,我已经从hello world脚本修改为在线获取其他脚本并安装和修改它们。现在我正在写我自己的,在写的过程中,我有一点顿悟。。因为我一直在修改和玩弄的脚本是以某种方式完成的,所以我也是以这种方式开始的。但现在我认为这可能是低效的编码,或者我的想法只是出于某种原因而错了 我的脚本是sayindex.php,这是一个交互式站点,有用户。我有4个不同的数据库存储某种形式的数据。第一个数据库关注用户及其数据。第二个问题是其他问题,等等 我一直在

我是一个相当新的php程序员。我已经学习了几周,在这几周里,我已经从hello world脚本修改为在线获取其他脚本并安装和修改它们。现在我正在写我自己的,在写的过程中,我有一点顿悟。。因为我一直在修改和玩弄的脚本是以某种方式完成的,所以我也是以这种方式开始的。但现在我认为这可能是低效的编码,或者我的想法只是出于某种原因而错了

我的脚本是sayindex.php,这是一个交互式站点,有用户。我有4个不同的数据库存储某种形式的数据。第一个数据库关注用户及其数据。第二个问题是其他问题,等等

我一直在写它的方式是,每当我需要对数据库进行查询时,在脚本开始时,我都会定义数据库连接变量,例如

$servername = "127.0.0.1";
$dbusername = "dbusername";

    $dbpassword = "passwordhere";
    $dbname = "database1";
    $roomdb = "database2";
等 等

因此,在我的脚本中的所有不同点上,都需要运行数据库查询,所以我一直在打开这样的连接

$link = mysqli_connect("$servername", "$dbusername", "$dbpassword", "$roomdb");
然后运行查询

然后关闭数据库连接

但后来我正在洗澡,突然想到。。为什么我不能在脚本的顶部定义数据库连接信息,只打开每个数据库的一个连接。然后运行整个脚本,在需要的地方使用查询。。如果需要对一个数据库进行多个查询,只需对查询进行不同的命名即可。例如$query1、$query2等

$query = "INSERT INTO `$room` (room, message, color) VALUES ('$room', '$randomvariable', '$randomvariable')";
这有意义吗?在我看来,如果每次脚本运行时我几乎肯定要对这些数据库进行多个连接,并且即使有时我不需要其中一个连接,那么在开始时只连接一次会更有效,让它可用,然后为每个不同的查询使用唯一的查询名称,然后在脚本末尾关闭连接

任何关于为什么我可能错了,或者为什么最好在需要的地方打开完整连接,然后再次关闭的见解都将不胜感激。我想知道它是如何发挥最佳功能的,这样我就可以尽可能地进行最佳编码实践


但让我们假设我甚至有一个数据库。同样的逻辑也适用。只在脚本顶部打开一个db连接,让它在整个脚本运行过程中保持打开状态,只使用不同的$querynames对同一个db执行查询,而不是打开它、运行查询、关闭它,然后对所有查询执行10次不同的操作,这样是否更有效。对我来说,多次打开和关闭连接并增加开销似乎毫无意义。我从中学到的示例是代码错误还是有原因我们需要将每个连接处理程序保存在不同的变量中

$link1 = mysqli_connect("$servername", "$dbusername", "$dbpassword", "$roomdb");    
$link2 = mysqli_connect("$servername", "$dbusername", "$dbpassword", "$dbname");
然后分别使用$link_标识符,这样我们就知道连接到什么了

mysqli_query($link1,"INSERT INTO `$room` (room, message, color) VALUES ('$room', '$randomvariable', '$randomvariable'");

mysqli_close($link1);

注意:打开连接时间过长不是好的编码标准。我们只会在需要查询数据库中的任何内容时进行连接,并在事务结束后立即关闭连接。

您实际上是在一个数据库中有多个数据库还是多个表?如果是多个数据库,那么您在这种格式背后的推理是什么?我实际上有多个单独的数据库,每个数据库都有几个不同的表。但是让我们假设我甚至有一个数据库。同样的逻辑也适用。只在脚本顶部打开一个db连接,让它在整个脚本运行过程中保持打开状态,只使用不同的$querynames对同一个db执行查询,而不是打开它、运行查询、关闭它,然后对所有查询执行10次不同的操作,这样是否更有效。对我来说,多次打开和关闭连接并增加开销似乎毫无意义。我从中了解到的示例是代码错误还是有原因对,我知道如何进行连接,以及如何运行查询,但我只是想知道在脚本开始时运行$link1和$link2,然后将它们保持打开状态,直到脚本稍后需要它们时,是否更有效?我使用的示例仅在需要更新或插入内容时执行$link1和$link2。然后几乎立即使用mysqli_close($link)。。然后在稍后的脚本中,再次启动$link1并运行查询,然后再次关闭。。这只是糟糕的编码,还是有原因的?在你的例子中,你可以立即使用mysqli_close($link1)。但假设代码再往下20行,我还有另一个$query需要发送到同一个数据库连接。让$link1保持打开状态,在第一次查询后不关闭它,这样我就可以在20行之后再次使用$link1,而不是先运行$link1,然后再访问它,这难道没有意义吗?处理多个数据库本身是痛苦、无意义和复杂的。正如@Sean所评论的,我们应该始终拥有一个db连接和多个表。对于上述情况,如果您再次需要$link1,最好关闭并重新打开。保持连接打开是不可取的,因为这样会消耗更多内存,而且数据可能会被错误的更新/插入损坏。因此,如果我将其全部移动到一个数据库,实际上建议立即终止数据库连接,然后在以后需要时在脚本中重新打开它?正确,这将是处理多个数据库的更有效的方法