PHP/mysql:是否正在将 (SELECT, {resource}) 更改为 ({resource}, SELECT) mysql_* 到 mysqli_* 的可行临时补丁?
PHP/mysql: Is changing (SELECT, {resource}) to ({resource}, SELECT) a viable temporary patch for mysql_* to mysqli_*?
首先检查 mysql*() 和 mysqli*() 函数族的应用差异,在我看来
$seta = mysql_query("SELECT * FROM table WHERE field = $Filter", $database);
可以快速替换为:
$seta = mysqli_query($database, "SELECT * FROM table WHERE field = $Filter");
同样,似乎
IF ($A = mysql_fetch_array($seta)) {
do {
//code here
} while ($A = mysql_fetch_array($seta));
}
可以替换为:
IF ($A = mysqli_fetch_array($seta)) {
do {
//code here
} while ($A = mysqli_fetch_array($seta));
}
这会像我期望的那样工作吗?因为它在 mysqli*()?
之前有效
请注意:我不是在问我是否应该这样做,只有当我可以做到这一点。我很清楚,在断腿上拍打 band-aid 是没有用的……也就是说,在准备 3 月份的演示之前,我没有那么多小时的 coding/testing 时间。
是的,我知道这是易受攻击的代码。没有保障我不会去生产。我还意识到我并没有以这种方式使用 mysqli*() 函数族的所有功能。
我的目标是在没有那么繁重的时间时适当地重构所有内容 c运行ch(是的,我知道,著名的程序员最后的话)。我只需要 运行 的补丁代码进行演示,然后我就可以退休了。
我对工作原型寄予厚望——无论是在原地还是在服务器上我都在旋转只是为了证明需要软件更新——我将能够离开 PHP v4.x蓝调落后。
项目:
同时检查:
How to upgrade from mysql* to mysqli*?
PHP Migrating from mysql* to mysqli
以上标题已删除下划线以防止格式化
又快又脏的方法,重点是脏,就是这样把mysql_query
转换成mysqli_query
等等。问题是 mysql_query
使用起来真的很笨拙,因此保留编码风格无助于清理任何东西。
虽然我强烈建议切换到 PDO,但它是一个更灵活、功能更强大的数据库层,如果您想要 mysqli
那么您要做的就是立即使用 parameterized queries and bind_param
to add user data to your query. This solves the vast majority of SQL injection bugs。我还建议使用 object-oriented 界面,这样更新后的代码就很明显了。单个 i
的区别很容易被忽视,而且通常不那么冗长。
换句话说,您替换的代码如下所示:
$stmt = $database->prepare("SELECT * FROM table WHERE field=?");
$stmt->bind_param('s', $filter);
$res = $stmt->execute();
如果您在执行此操作时遵守纪律,您应该抓住所有 SQL 错误。
由于命名参数,PDO 更好:
$stmt = $database->prepare("SELECT * FROM table WHERE field=:filter");
$res = $stmt->execute(array('filter' => $filter));
这通常意味着 long-run 中的代码更少。
首先检查 mysql*() 和 mysqli*() 函数族的应用差异,在我看来
$seta = mysql_query("SELECT * FROM table WHERE field = $Filter", $database);
可以快速替换为:
$seta = mysqli_query($database, "SELECT * FROM table WHERE field = $Filter");
同样,似乎
IF ($A = mysql_fetch_array($seta)) {
do {
//code here
} while ($A = mysql_fetch_array($seta));
}
可以替换为:
IF ($A = mysqli_fetch_array($seta)) {
do {
//code here
} while ($A = mysqli_fetch_array($seta));
}
这会像我期望的那样工作吗?因为它在 mysqli*()?
之前有效请注意:我不是在问我是否应该这样做,只有当我可以做到这一点。我很清楚,在断腿上拍打 band-aid 是没有用的……也就是说,在准备 3 月份的演示之前,我没有那么多小时的 coding/testing 时间。
是的,我知道这是易受攻击的代码。没有保障我不会去生产。我还意识到我并没有以这种方式使用 mysqli*() 函数族的所有功能。
我的目标是在没有那么繁重的时间时适当地重构所有内容 c运行ch(是的,我知道,著名的程序员最后的话)。我只需要 运行 的补丁代码进行演示,然后我就可以退休了。
我对工作原型寄予厚望——无论是在原地还是在服务器上我都在旋转只是为了证明需要软件更新——我将能够离开 PHP v4.x蓝调落后。
项目:
同时检查:
How to upgrade from mysql* to mysqli*?
PHP Migrating from mysql* to mysqli
以上标题已删除下划线以防止格式化
又快又脏的方法,重点是脏,就是这样把mysql_query
转换成mysqli_query
等等。问题是 mysql_query
使用起来真的很笨拙,因此保留编码风格无助于清理任何东西。
虽然我强烈建议切换到 PDO,但它是一个更灵活、功能更强大的数据库层,如果您想要 mysqli
那么您要做的就是立即使用 parameterized queries and bind_param
to add user data to your query. This solves the vast majority of SQL injection bugs。我还建议使用 object-oriented 界面,这样更新后的代码就很明显了。单个 i
的区别很容易被忽视,而且通常不那么冗长。
换句话说,您替换的代码如下所示:
$stmt = $database->prepare("SELECT * FROM table WHERE field=?");
$stmt->bind_param('s', $filter);
$res = $stmt->execute();
如果您在执行此操作时遵守纪律,您应该抓住所有 SQL 错误。
由于命名参数,PDO 更好:
$stmt = $database->prepare("SELECT * FROM table WHERE field=:filter");
$res = $stmt->execute(array('filter' => $filter));
这通常意味着 long-run 中的代码更少。