Php mysqli_connect与mysql_connect的区别

Php mysqli_connect与mysql_connect的区别,php,mysql,mysqli,Php,Mysql,Mysqli,我需要将PHP5代码转换为php7。 所有mysql语句都使用定义以下函数的脚本进行转换: function mysql_connect($host, $username, $password){ global $dbconnect; $dbconnect = mysqli_connect($host, $username, $password); return $dbconnect; } 好在它在php7上工作 现在我改用mysqli_connect重写了所有脚本。

我需要将PHP5代码转换为php7。 所有mysql语句都使用定义以下函数的脚本进行转换:

function mysql_connect($host, $username, $password){
    global $dbconnect;
    $dbconnect = mysqli_connect($host, $username, $password);
    return $dbconnect;
}
好在它在php7上工作

现在我改用mysqli_connect重写了所有脚本。 但是,使用mysqli的第一个函数失败了

mysqli_connect(): (HY000/1044): Access denied for user 
如果我切换回
mysql\u connect
,它将工作,并在下一个mysqli命令中再次失败

为什么?

编辑: 连接的完整代码:

function db_connect() 
{
    global $db_sql_hostname,$db_sql_database,$db_sql_user,$db_sql_password;
    require_once 'db-config.php';
    global $db_handle;    
    $db_handle = mysqli_connect($db_sql_hostname, $db_sql_user, $db_sql_password, $db_sql_database) or die("Konnte nicht zum mySQL-Server verbinden: ".mysqli_error());
    mysqli_select_($db_sql_database, $db_handle) or die("Konnte die Datenbank ".$db_sql_database." nicht oeffnen: ".mysqli_error());    
    return $db_handle;
}
请注意,一切都与mysql_uu命令配合使用。变量是正确的

EDIT2:这是db-config.php

<?php
  $db_sql_hostname   = "hostIP";
  $db_sql_database   = "dbname";
  $db_sql_dbuser     = "dbuser";
  $db_sql_dbpassword = "dbpassowrd";
?>

您正在将
TRUE
作为数据库名称传递(mysqli\u connect的第四个参数),这将导致错误:

_警告:mysqli_connect():(HY000/1044):拒绝用户“…@”…”访问

将行更改为:

$db_handle = mysqli_connect($db_sql_hostname, $db_sql_dbuser, $db_sql_dbpassword) or die("Konnte nicht zum mySQL-Server verbinden: ".mysqli_error());

mysqli_connect需要这些参数
mysqli\u连接(ip、用户、密码、数据库)

何处为 mysql\u connect需要
mysql\u连接(ip、用户、密码)

因此,指定正确的数据库并删除true将解决您的问题

来源:PHP文档

在您的功能中

function db_connect() 
{
    global $db_sql_hostname,$db_sql_database,$db_sql_user,$db_sql_password;
    require_once 'db-config.php';
    global $db_handle;    
    $db_handle = mysqli_connect($db_sql_hostname, $db_sql_user, $db_sql_password, $db_sql_database) or die("Konnte nicht zum mySQL-Server verbinden: ".mysqli_error());
    mysqli_select_($db_sql_database, $db_handle) or die("Konnte die Datenbank ".$db_sql_database." nicht oeffnen: ".mysqli_error());    
    return $db_handle;
}
mysqli\u select\u()
应该是
mysqli\u select\u db()
并指定
$db_handle
作为第一个参数,然后是数据库ie的名称。
myslqi\u选择数据库($db\u句柄,$db\u sql\u数据库)

请参阅此文档以了解更多信息。

完整的错误信息是什么?如果需要,您可以隐藏用户/主机。@RudyM:不指定数据库不会导致由于用户错误而拒绝访问…@JiriHrazdil,即使如此,我还是要指定数据库。如果您以只能访问服务器中特定数据库的用户身份登录,则访问被拒绝。尽管如此,仅定义您自己的
mysql\u*
函数,然后使用
mysqli\u*
函数并不是最好的主意,如果这是永久性的。当使用
mysqli\uuu
时,您应该使用准备好的语句,这要求您重建几乎每个查询。像这样干扰填隙层是最后的选择。您现在有机会审核所有SQL调用,并纠正任何未正确编码的调用。使用带有占位符值的准备好的语句可以显著提高站点的安全性,并可以消除您可能从未修复过的所有类错误。现在,下一行的错误更改
mysqli\u select\u db()预期参数1为mysqli
您没有提到
mysqli\u select\u db()
在您发布的代码中,因此需要您这边的更多代码。但是您是否将
$db\u handle
传递给
mysqli\u select\u db()
?我添加了完整的函数。我确实通过了控制,我找到了问题的根源。mysqli_u命令要求始终首先使用连接变量。然而,mysql_u命令并非如此。因此,我必须使用mysql命令更改每一行。现在它几乎可以工作了(仍然有一些行是错误的)。然而,我不工作。错误是
警告:mysqli\u select\u db()希望参数1是mysqli,字符串在…