[英]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.