【发布时间】:2011-12-19 00:26:30
【问题描述】:
我继承了一个中等规模的代码库,它大量使用了 mysql_fetch_assoc 和 mysql_fetch_object,并且没有任何安全预防措施来防止 SQL 注入。我认为这是一件非常糟糕的事情TM 需要修复。
最初,我打算使用 mysqli prepare/bind_param/execute 语句来处理数据库查询。但是,以下方法不起作用:
$stmt = $GLOBALS['db']->prepare('SELECT * FROM Users WHERE Username=?');
$stmt->bind_param('s', $username);
$stmt->execute();
// Somehow retrieve the fetched row as an object (Doesn't work!)
return $stmt->fetch_assoc();
问题 1:有没有办法通过 prepare/bind 使用 fetch_assoc 或 fetch_object?我可以重构所有的代码,但是会很乱而且需要很长时间。
问题 2:如果无法做到这一点,从安全角度来看,使用 mysqli_query() 是否同样有效,前提是所有输入都通过 mysql_real_escape_string() 正确转义?您还有其他建议吗?
【问题讨论】: