pg_query 错误,因为名称:'kill 'em all'
pg_query error because of name: 'kill 'em all'
pg_query 在 name = ' Kill 'em all ' 的情况下无法执行,错误指向 "em" 之前的“ '”,这是问题所在,但我可以找不到解决办法。
$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
中的 ' 是字符串文字的一部分而不是它的分隔符。
您必须确保您的有效载荷参数没有 "break" 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
(,)
');
if ( !$result ) {
yourErrorHandler();
}
$result = pg_execute($conn, '', array($food_id, $foo));
if ( !$result ) {
yourErrorHandler();
}
pg_query 在 name = ' Kill 'em all ' 的情况下无法执行,错误指向 "em" 之前的“ '”,这是问题所在,但我可以找不到解决办法。
$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
中的 ' 是字符串文字的一部分而不是它的分隔符。
您必须确保您的有效载荷参数没有 "break" 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
(,)
');
if ( !$result ) {
yourErrorHandler();
}
$result = pg_execute($conn, '', array($food_id, $foo));
if ( !$result ) {
yourErrorHandler();
}