2

是否可以使用PHP中已弃用的mysql扩展来使用准备好的语句?我有一台不会很快获得 mysqli 或 PDO 的服务器,需要对用户提供的文本进行 RLIKE 查找。mysql_real_escape_string() 将被使用,但我担心它会不够。

4

2 回答 2

2

这是一个 PHP 脚本,使用已弃用的 mysql API,演示了使用 PREPARE 和 EXECUTE。我用 PHP 5.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-05T00:11:16.567 回答
0

看看这个: http ://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html

您可以使用手动参数绑定准备好的语句的 SQL 语法。

于 2013-03-04T23:31:34.933 回答