将脚本转换为MySQLi

时间:2015-06-01 23:46:44

标签: php mysql mysqli

我刚刚在网上找到了以下脚本,但我正在寻找帮助来编辑它,因为我知道大多数这些功能已经不再可用了,我不确定我需要改变什么以及我不想做什么这个脚本与MySQLi一起使用?

header('Access-Control-Allow-Methods: *');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Content-Type, Content-Language, Authorization');
header('Access-Control-Expose-Headers: Authorization');

# CONFIG
define('_DB_HOST', 'mysql.co.uk');
define('_DB_NAME', 'main');
define('_DB_USER', 'admin');
define('_DB_PASS', 'password');

# DB CONNECT
$connection = mysql_connect(_DB_HOST, _DB_USER, _DB_PASS) or die ('Unable to connect to MySQL server.<br ><br >Please make sure your MySQL login details are correct.');
$db = mysql_select_db(_DB_NAME, $connection) or die ('request "Unable to select database."');

# ACTION
$keys = isset($_REQUEST['keys'])?$_REQUEST['keys']:array();
if (!is_array($keys)){
    $keys = array($keys);
}
$keys = array_filter($keys);

# RESULT
$unavailable = array();
if (!empty($keys)){
    $sql = "SELECT * FROM calendar WHERE DATE_FORMAT(date, '%Y-%m') IN ('".implode("', '", $keys)."')";
    $sql_result = mysql_query ($sql, $connection ) or die ('request "Could not execute SQL query" '.$sql);
    while ($row = mysql_fetch_assoc($sql_result)) {
        $unavailable[] = $row['date'];
    }
}
echo(json_encode($unavailable));
exit();

1 个答案:

答案 0 :(得分:1)

我过去做过从mysql到mysqli的大规模项目转换,这真的不是很难。对于初学者来说,mysqli库允许您使用面向对象的样式或过程样式,而过程样式与旧的mysql函数非常匹配。

与其为您转换所有代码,我认为向您展示自己做起来有多容易,这样更有价值。关键是习惯了php文档,他们是你的朋友!

对于您在代码中找到的每个mysql_ *函数,在php.net上查找mysql版本和mysqli版本,并比较每个人期望的参数以及返回类型。有许多mysqli过程样式函数只是改变参数的顺序。

例如,代码中的第一个mysql_ *函数是mysql_connect。查看the documentation,此函数需要接收主机,用户名和密码(以及一些可选参数)。在其向mysqli_connect建议的链接后的该页面上,我们看到它是mysqli::__construct的别名。所以点击进入我们终于看到它还需要主机,用户名和密码。所以你最好继续这个,只需将缺少的“i”添加到函数调用中。

对于mysql_select_db,它需要数据库名称和数据库连接链接的可选链接。对于mysqli_select_db,它需要连接链接,然后是数据库名称。简单,只需交换参数的顺序即可将该调用转换为mysqli。 (请注意,在mysqli_connect中,它需要一个可选的第4个参数,您可以在其中指定数据库名称,如果愿意,可以跳过执行mysqli_select_db的步骤。)

尝试使用文档转换其他一些功能,如果遇到问题,请发布新代码,我会尽力提供帮助。