我想从查询字符串中提供一个SQL语句,但我所有的努力都会导致转义单引号和斜杠。
答案 0 :(得分:2)
首先,确保你真的想要这样做。这对于SQL注入攻击来说已经成熟。
如果你想要对MySQL数据库运行语句,只需使用phpMyAdmin或MySQL工作台。
答案 1 :(得分:0)
假设您使用的是mysql,请使用mysql_real_escape_string()
http://www.php.net/manual/en/function.mysql-real-escape-string.php
答案 2 :(得分:0)
我如何在通用中实现它 方式是什么?
所有查询都必须在您的脚本中进行硬编码 当然,其中一些可以动态构建,但是你可以只使用动态数据,而不是控制结构 所以,它必须是这样的:
$name=mysql_real_escape_string($_POST['name']);
if ($id = intval($_POST['id'])) {
$query="UPDATE table SET name='$name' WHERE id=$id";
} else {
$query="INSERT INTO table SET name='$name'";
}
或者这个:
if (!isset($_GET['id'])) {
$query="SELECT * FROM table";
} else {
$id = intval($_GET['id'];
$query="SELECT * FROM table WHERE id=$id";
}
或者其他什么 当然,插入的数据必须正确转义,转换或binded。
但有时我们需要使用动态运算符或标识符。原理是一样的:所有内容都必须在脚本中进行硬编码,不能直接从客户端传递给SQL查询。
比如,为了进行动态排序,您可以使用像这样的代码
$orders=array("name","price","qty");
$key=array_search($_GET['sort'],$orders));
$orderby=$orders[$key];
$query="SELECT * FROM `table` ORDER BY $orderby";
或组装动态WHERE:
$w=array();
if (!empty($_GET['rooms'])) $w[]="rooms='".mysql_real_escape_string($_GET['rooms'])."'";
if (!empty($_GET['space'])) $w[]="space='".mysql_real_escape_string($_GET['space'])."'";
if (!empty($_GET['max_price'])) $w[]="price < '".mysql_real_escape_string($_GET['max_price'])."'";
if (count($w)) $where="WHERE ".implode(' AND ',$w); else $where='';
$query="select * from table $where";