我想從查詢字符串中提供一條SQL語句,但是我所有的努力都會導致單引號和斜槓轉義。PHP撇號和查詢字符串
0
A
回答
2
首先,確保你確實想要這樣做。 SQL注入攻擊已經成熟。
如果您想要對MySQL數據庫運行語句,只需使用phpMyAdmin或MySQL工作臺即可。
0
假設你正在使用MySQL,使用mysql_real_escape_string()
http://www.php.net/manual/en/function.mysql-real-escape-string.php
0
我怎麼能在一個通用的 的方式實現這一點?
所有查詢都必須在您的腳本中硬編碼。
當然,它們中的一些可以動態構建,但是隻允許您創建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";
}
或什麼的。
當然,插入的數據必須妥善轉義,轉換或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";
請告訴我們你的代碼,你的輸入和你的輸出。 – 2010-06-01 15:54:57
如果我正確地閱讀你的問題,那麼我會強烈建議不要在查詢字符串中使用SQL查詢。 – 2010-06-01 15:56:10
是的,除此之外,你不應該那樣做...工作與行動... sorta像?action = del => switch $ action case:del =>查詢 – Tobias 2010-06-01 15:57:52