将mysql_ *转换为mysqli_ *问题

时间:2013-09-24 16:58:12

标签: php mysqli

我正在使用MySQLConverterTool转换我的网络应用

我遇到的第一个问题是代码变得越来越大我甚至不明白这意味着什么?这是非常小的代码,现在我觉得这太大了。

//old code
$ask_id = mysql_real_escape_string($_POST['ask_id']);

//after convert
$ask_id = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $_POST['ask_id']) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

它工作正常,但我想知道它是mysqli_*的正确方法还是我需要修复一些问题或错误?

我也想知道如何使这部分安全

if (isset($_POST['asking-money'])) {
    $dailyBonus = 10000;
    $update = mysqli_query($GLOBALS["___mysqli_ston"], "UPDATE users SET ask_time='$newtime', bonus='dailyBonus'  WHERE id='$userid'");
// some more calculation
}

3 个答案:

答案 0 :(得分:2)

第一段代码看起来像(粗略地)添加了一个巨大的三元语句来检查你使用的变量是否至少被设置,但除此之外你应该只能使用:

mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $_POST['ask_id'])

对于SQL查询的安全性,请尝试使用Prepared Statements而不是直接使用变量查询

mysqli_prepare

答案 1 :(得分:2)

对于mysqli_ *部分,以前用mysql_ *做的大部分事情与新的前缀几乎相同,所以,很可能没有问题 并且对于如何使其安全,只需评估和准备在查询中使用它们之前从用户传递的所有参数,换句话说,在任何情况下都不要直接在查询中使用用户输入。除此之外,代码对我来说似乎很好。

答案 2 :(得分:0)

第一个代码是三元语句(if / else的简短方法)。太多了,我的意见。

如果您能够使用它,我建议PDO并且prepared statements。它非常安全且易于操作。

顺便说一下:尽量避开MySQLConverterTool。几个月之后很难进入这个代码。 K eep i t s 集市和 s 实施! : - )

祝你好运!