PHP撇号和查询字符串

时间:2010-06-01 15:54:08

标签: php mysql

我想从查询字符串中提供一个SQL语句,但我所有的努力都会导致转义单引号和斜杠。

3 个答案:

答案 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";