在PHP中是否可以使用使用过时的mysql扩展的预准备语句?我有一个服务器,这将不会很快得到mysqli或PDO,并需要做RLIKE查找用户提供的文本。将使用mysql_real_escape_string(),但我担心这是不够的。
发布于 2013-03-05 08:11:17
下面是一个PHP脚本,它使用了过时的mysql API,演示了如何使用准备和执行。我用PHP5.3.15和MySQL 5.5.29测试了这一点,它对我很有效。但是,我不推荐这样做。
<?php
$x = 3;
$y = 4;
mysql_connect('localhost', 'root', 'xxxx') or die(mysql_error());
mysql_select_db('test');
mysql_query("SET @sql = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse'");
mysql_query("PREPARE stmt FROM @sql");
mysql_query("SET @x = $x"); // SQL injection!
mysql_query("SET @y = $y"); // SQL injection!
$result = mysql_query("EXECUTE stmt USING @x, @y");
while ($row = mysql_fetch_assoc($result)) {
print $row["hypotenuse"] . "\n";
}
mysql_close();正如我在注释中指出的,这有点忽略了准备好的查询的要点,因为您必须将可能不受信任的内容插入到SET语句中。
您确实应该修复您的PHP安装并启用mysqli或PDO_mysql扩展,这样您就可以使用真正的API级别的准备和执行。
发布于 2013-03-05 07:31:35
看看这个:http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html
这里有用于手动绑定参数的预准备语句的SQL语法。
https://stackoverflow.com/questions/15213110
复制相似问题