【问题标题】:Changing a global MySQL db file to MySQLi db file from PHP 4 to PHP 5.4将全局 MySQL db 文件更改为 MySQLi db 文件,从 PHP 4 更改为 PHP 5.4
【发布时间】:2014-09-17 22:23:19
【问题描述】:

我一直使用以下 MySQL 数据库连接进行程序编码,而不是在 PHP 4 上运行 OO,现在我正在将一些旧网站迁移到 PHP 5.4:

    <?php
global $db_user;
global $db_pass;
global $db_host;
global $db_name;
$db_user    = 'USERNAME';
$db_pass    = 'PASSWORD';
$db_host    = 'HOST';
$db_name    = 'DBNAME';
function do_query ( $sql ) 
{
    global $db_user;
    global $db_pass;
    global $db_host;
    global $db_name;
    mysql_pconnect( $db_host, $db_user, $db_pass )or die("Cant connect to $db_host: ");
    mysql_select_db( $db_name )or die("Cant select $db_name: ");
    $res = mysql_query( $sql )or die("You messed up in your sql Using <b>$sql</b>\n\r" . mysql_error());
    return $res;
}
?>

如何更改它以使用 PHP 5.4,因为我的网站所需要的只是更改此文件,因为现在其他所有内容都是最新的,并且我与 MySQLi 连接的当前方式永远不会以相同的方式输出错误?

提前致谢。

更新:

我尝试了以下方法:

<?php
$db_user    = 'USERNAME';
$db_pass    = 'PASSWORD';
$db_host    = 'HOST';
$db_name    = 'DBNAME';
function do_query ( $sql ) 
{
    mysqli_connect( $db_host, $db_user, $db_pass )or die("Cant connect to $db_host: ");
    mysqli_select_db( $db_name )or die("Cant select $db_name: ");
    $res = mysqli_query( $sql )or die("You messed up in your sql Using <b>$sql</b>\n\r" . mysqli_error());
    return $res;
}
?>

并使用 mysqli_close();最后还是不行。

我也尝试在程序上使用它:

$link = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');

if (!$link) {
die('Connect Error (' . mysqli_connect_errno() . ') '
        . mysqli_connect_error());
}

但我似乎无法将它作为一个函数来工作。

我已经对不同版本进行了大量测试,但我不想用大多数人已经知道的信息来过度填充页面,所以我只放了我过去使用过的原始代码,因为我还有很多其他变体我努力了。我不只是想推卸责任,只是想解释我究竟想转换为 MySQLi 的内容。抱歉,如果人们认为这毫无意义,但我被困住了。谢谢。

【问题讨论】:

  • 因为只有三个函数调用,所以编辑起来相当容易。你具体是在哪里绊倒的? (另请注意,为每个查询重复调用数据库连接函数并不是一个聪明的主意。)
  • 如果你打算这样做,至少将你的连接注入你的函数。不要为每个查询建立一个连接。而mysqli_query 要求将连接作为第一个参数传递
  • 每次使用时,加载时为一页,然后与mysqli_close()关闭连接;完成后,它到达页面/脚本的末尾。它不是一直打开的。
  • 旁注:如果您实际使用mysqli_close();,如图所示,您需要像mysqli_close($con); 那样将DB 连接传递给它,同时像$con = mysqli_connect($db_host, $db_user, $db_pass,$db_name) 那样分配DB 连接 - mysqli_close() 需要DB 连接作为参数传入。
  • 对不起。我将它用于 $link 示例。谢谢。

标签: php mysql sql mysqli database-connection


【解决方案1】:

一篇文章中的三个缺陷。

首先,使用函数创建连接然后查询是一个坏主意。

其次,您正在使用持久连接。因此,即使页面完成,连接仍然存在。这样你会耗尽你的数据库连接池。

第三,您正在使用已弃用的 mysql_ 函数。

所以这是现在做事的首选方式,使用mysqli 和对象方法。我通常不推荐$GLOBALS,但听起来你正在使用遗留代码

$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);
function do_query($sql) {
    $mysqli = $GLOBALS['mysqli'];
    $res = $mysqli->query($sql)or die("You messed up in your sql Using <b>$sql</b>\n\r" . mysqli->error);
    return $res;
}    

【讨论】:

  • 谢谢。问题是我在整个网站上都使用了这个功能,就像 4 年前一样,我不想在这些网站上花费太多时间,因为它们非常基础,所以我想坚持使用这个功能。请问使用它作为函数有什么缺点?
  • 如果我使用对象方法,它是否仍然适用于我使用该函数设置为程序性的脚本?
  • 我已将其更改为使用对象注入。无论您使用哪个,mysqli_query(对象或程序)都会返回一个mysqli_result 对象。你仍然可以使用mysqli_fetch_assoc() 和类似的函数来程序化,但它们的存在纯粹是为了遗留。
  • 谢谢。所以我仍然可以在程序格式中使用 mysql_fetch_assoc()、mysql_num_rows() 等?
  • 或多或少。请确保它是mysqli_
猜你喜欢
  • 2012-08-20
  • 2019-06-24
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
相关资源
最近更新 更多