簡體   English   中英

PHP撇號和查詢字符串

[英]PHP Apostrophe and query string

我想從查詢字符串中提供一條SQL語句,但是我的所有努力都導致轉義的單引號和斜杠轉義。

首先,請確保您確實要這樣做。 SQL注入攻擊已經成熟。

如果您想對MySQL數據庫運行語句,只需使用phpMyAdmin或MySQL工作台。

假設您正在使用mysql,請使用mysql_real_escape_string()

http://www.php.net/manual/en/function.mysql-real-escape-string.php

如何以通用方式實現此目的?

所有查詢必須在腳本中進行硬編碼。
當然,其中一些可以動態構建,但只允許動態創建DATA,而不能創建控制結構。
因此,它必須是這樣的:

$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";  
}  

管他呢。
當然,插入的數據必須正確地轉義, 強制轉換綁定

但是有時我們需要使用動態運算符或標識符。 原理是相同的:所有內容都必須在腳本中進行硬編碼,沒有任何內容可以直接從客戶端傳遞到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";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM