Php mysqli_connect与mysql_connect的区别
我需要将PHP5代码转换为php7。 所有mysql语句都使用定义以下函数的脚本进行转换: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重写了所有脚本。
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,字符串在…