将mysql_query()更改为MySQLi或PDO或更安全的方法的简单方法?

时间:2015-04-14 19:09:19

标签: php mysql pdo mysqli sql-injection

我对PHP很陌生,并且我正在尝试在使表单安全的方面学到更多知识,这样我的数据库就更难以通过SQL注入等方式搞砸了。我们公司的当前网络程序员/ php家伙在短时间内退出,所以我的老板暂时把我放在php程序员的位置,在前一个程序员下只进行了一周的训练(我做了大量的html和css工作,但没有php事先),直到他们找到真正的替代品。

无论如何,我读到使用mysql_query()是一个折旧的函数,应该避免使用它,因为该方法很容易受到攻击。我看到我的两个选择是现在使用PDO或MySQLi。作为PHP的新手,我无法确定我需要做什么才能转换我正在使用的代码(从请求中发送信息以及在网站上的报价表格并将其存储在数据库中,以防止电子邮件出现故障)通过PDO或MySQLi将数据发送到数据库的更安全的方法。

我正在使用的当前代码行是:

    $query = mysql_query("insert into request_for_quote(rfq_company_name, rfq_name, rfq_email, rfq_phone, rfq_end_user) values ('$rfqCompanyName', '$rfqName', '$rfqEmail', '$rfqPhone', '$rfqEndUser')");

主要由$ _POST变量提供支持。

                $rfqName = mysql_real_escape_string($_POST['rfq_name']);
                $rfqEmail = filter_var($_POST['rfq_email'], FILTER_VALIDATE_EMAIL);
                $rfqPhone = mysql_real_escape_string($_POST['rfq_phone']);
                $rfqCompanyName = mysql_real_escape_string($_POST['rfq_company_name']);
                $rfqEndUser = mysql_real_escape_string($_POST['rfq_end_user']);

现在,我的代码完成了我所需要的,它似乎极易受到数据库攻击,我想学习如何修复它,但似乎我在网上找到的所有示例都没有使用“将XYZ变量”设置为表格列ABC“。< / p>

我是否进行了任何简单的更改,以使我的数据库提交查询更安全?

1 个答案:

答案 0 :(得分:0)

几个月前我曾写过一些类似问题的答案,但我现在无法找到它。

  • 搜索并替换。

找到mysql_并替换为mysqli_,替换("SELECT ...并在括号后面插入($dbLinkIdentifier, "SELECT ...其中$var是与DB的连接。这是程序化的MySQLi,

初始链接$dbLinkIdentifiermysqli_connect()构造,因为您可以识别多个数据库连接,每个连接都有自己的$var

这是一个程序化的MySQLi格式/布局。如果你想转移到结构更复杂的OO MySQLi,但整体上更好。