没有 mysqli 或 PDO 的 PHP 准备语句

标签 php mysql

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

最佳答案

这是一个 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 级准备和执行。

关于没有 mysqli 或 PDO 的 PHP 准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15213110/

相关文章:

php - 将 MySQL 数据库从共享主机传输到云提供商

php - 任何人都可以解决那个sql问题吗?

java - 持久化@OneToMany后子表外键为空

mysql - 如何根据这些表中的纬度/经度(距离 10)将表 A 的多行与表 B 的多行进行匹配

java - 如何从 Java 插入 $_POST

mysql - MYSQL表中的约束?

php - 如何在 php 中使用 json 获取数组的前 10 个值

php - 显示来自连接的数据?

不同服务器上的php/mysql连接

php MYSQL 查询问题