【发布时间】:2012-10-10 15:31:53
【问题描述】:
$query = '
PREPARE statement FROM
"INSERT INTO games_new
(
gamedate,
hometeam,
visitors,
result,
matchreport,
battedfirst,
fieldedfirst,
battedfirstruns,
battedfirstextras,
battedfirsttotal,
battedsecond,
fieldedsecond,
battedsecondruns,
battedsecondextras,
battedsecondtotal
)
VALUES
(
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
)
"';
$result = mysql_query($query);
if (!$result) {die("Database access failed: " . mysql_error());}
$query =
'SET @gamedate = $_POST["gamedate"],' .
'@hometeam = $_POST["hometeam"],' .
'@visitors = $_POST["visitors"],' .
'@result = $_POST["result"],' .
'@matchreport = $_POST["matchreport"],' .
'@battedfirst = $_POST["battedfirst"],' .
'@fieldedfirst = $_POST["fieldedfirst"],' .
'@battedfirstruns = $_POST["battedfirstruns"],' .
'@battedfirstextras = $_POST["battedfirstextras"],' .
'@battedfirsttotal = $_POST["battedfirsttotal"],' .
'@battedsecond = $_POST["battedsecond"],' .
'@fieldedsecond = $_POST["fieldedsecond"],' .
'@battedsecondruns = $_POST["battedsecondruns"],' .
'@battedsecondextras = $_POST["battedsecondextras"],' .
'@battedsecondtotal = $_POST["battedsecondtotal"]'
;
$result = mysql_query($query);
if (!$result) {die("Database access failed: " . mysql_error());}
$query = '
EXECUTE statement USING
@gamedate,
@hometeam,
@visitors,
@result,
@matchreport,
@battedfirst,
@fieldedfirst,
@battedfirstruns,
@battedfirstextras,
@battedfirsttotal,
@battedsecond,
@fieldedsecond,
@battedsecondruns,
@battedsecondextras,
@battedsecondtotal
';
$result = mysql_query($query);
if (!$result) {die("Database access failed: " . mysql_error());}
$query = 'DEALLOCATE PREPARE statement';
$result = mysql_query($query);
if (!$result) {die("Database access failed: " . mysql_error());}
我收到此语法错误:
数据库访问失败:您的 SQL 语法有错误;查看 与您的 MySQL 服务器版本相对应的手册 在 '["gamedate"],@hometeam = 附近使用的语法 $_POST["hometeam"],@visitors = $_POST["visitors"],@resu'
有什么想法吗?谢谢。
【问题讨论】:
-
您仍然容易受到 sql 注入的攻击,因为您首先将 _POST 数据填充到您的
SET查询中。通过完全错误地使用占位符,您绝对没有安全性。 -
有什么想法吗?是的。您只需复制和编造一些东西,而无需查看手册。