mysqli迁移问题和安全建议

时间:2013-05-27 18:14:00

标签: php mysqli

我尝试从mysql迁移到mysqli但这段代码不起作用。我是php和mysql的新手     

$link = mysqli_connect("localhost", "user", "password", "db");

/* check connection */ 
if (mysqli_connect_errno()) { printf("Connect failed: %s\n", 
mysqli_connect_error()); exit(); }

if ($result = mysqli_query($link, "SELECT * FROM users WHERE uid='$uid'")) {

if(mysqli_num_rows($result) != 0) {

mysqli_query($link, "UPDATE users SET array='$array' WHERE uid='$uid'");

}
else {mysqli_query($link, "INSERT INTO users (uid,array) VALUES ('$uid','$array')"); }

mysqli_free_result($result); }

/* close connection */ 
mysqli_close($link);
?>

所以我的问题是:

  1. 应该更改以使此代码有效;
  2. 此代码有哪些安全漏洞,您建议修改代码中的哪些更改?
  3. 感谢您花时间回答我的问题。

1 个答案:

答案 0 :(得分:0)

  1. 您需要将错误报告设置为最高级别并提供错误消息。这样你就可以让PHP告诉你出了什么问题以及需要修复什么。

    • 但是,有时我们的代码仍然无效,但周围没有错误消息。是时候做一些调试
  2. 您必须更改此代码,才能每个变量通过仅占位符

  3. 进入查询

    然而,原始的mysqli在准备好的语句中非常糟糕,因此,我建议不要使用它,而是转向PDOsafeMysql。后一个允许您使用相同数量的代码进行安全查询。

    if ($db->getOne("SELECT 1 FROM users WHERE uid=?i",$uid))
    {
        $db->query("UPDATE users SET array=?s WHERE uid=?i",$array,$uid);
    
    } else {
    
        $db->query("INSERT INTO users (uid,array) VALUES (?i,?s)",$uid,$array);
    }
    

    顺便说一句,Mysql允许你在 one 中进行所有这三个查询:

    $sql = "INSERT INTO users (uid, array) VALUES (?i,?s) 
            ON DUPLICATE KEY UPDATE array=values(array)";
    $db->query($sql, $uid, $array);