pg_query無法在name ='Kill'em all''的情況下執行錯誤指向「'」之前「em」這是問題但我找不到解決方案。pg_query錯誤,因爲名稱:'kill'em all'
$query = "INSERT INTO order (foodid,name) VALUES ($food_id,'$food')";
$result = pg_query($conn,$query) or die("Query cannot be executed");
pg_query無法在name ='Kill'em all''的情況下執行錯誤指向「'」之前「em」這是問題但我找不到解決方案。pg_query錯誤,因爲名稱:'kill'em all'
$query = "INSERT INTO order (foodid,name) VALUES ($food_id,'$food')";
$result = pg_query($conn,$query) or die("Query cannot be executed");
現在你傳遞的字符串
INSERT INTO order (foodid,name) VALUES (1,' Kill 'em all')
PostgreSQL服務器,其中有沒有機會確定「在'em
是字符串的一部分文字,而不是它的分隔符。
您必須確保您的有效負載參數不會「斷開」sql語句。
你可以做,要麼通過appropriate encoding/escaping function for string literals直接把有效載荷送入sql語句
// <--- test whether $food_id contains only digits here, e.g. via ctype_digit
$query = sprintf('
INSERT INTO
order (foodid,name)
VALUES
(%s,%s)',
$food_id, pg_escape_literal($conn, $food)
);
$result = pg_query($conn,$query) or die("Query cannot be executed");
或使用prepared statement + parameters,有效分離的有效載荷數據實際的SQL語句:
// Prepare a query for execution
$result = pg_prepare($conn, '', '
INSERT INTO
order (foodid,name)
VALUES
($1,$2)
');
if (!$result) {
yourErrorHandler();
}
$result = pg_execute($conn, '', array($food_id, $foo));
if (!$result) {
yourErrorHandler();
}
Thnx的信息。像魅力一樣工作。 –
這是因爲該特定名稱包含'''將其傳遞給數據庫查詢應該被替換與'\''。如果你在這裏遇到問題,你應該真正考慮帶有參數的「SQL注入」和SQL查詢主題以避免更多的麻煩。 – MoreThanChaos