PHP占位符

24m*_*3wg -4 php mysql

$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());}
Run Code Online (Sandbox Code Playgroud)

我收到此语法错误:

数据库访问失败:您的SQL语法中有错误; 查看与您的MySQL服务器版本对应的手册,以便在'["gamedate"],@ hometeam = $ _POST ["hometeam"],@ visitor = $ _POST ["visitor"],@ resu'附近使用正确的语法

有任何想法吗?谢谢.

Vyk*_*tor 5

首先,了解php中 single(')和double(")引用字符串之间的区别.

其次,不建议再使用mysql_功能.使用MySQLiPDO.

所以你应该使用:

"SET @gamedate = '{$_POST['gamedate']}'"
Run Code Online (Sandbox Code Playgroud)

而不是逃避'.或者更确切地说:

'SET @gamedate = "' . mysql_real_escape_string( $_POST['gamedate'], $conn) . '"'
Run Code Online (Sandbox Code Playgroud)

或者你可以正确的方式(例如使用PDO::prepare):

$sql = 'SET @gamedate = :gamedate';
$sth = $dbh->prepare($sql); // $dbh is instance of PDO
$sth->execute(array(':gamedate' => '...'));
Run Code Online (Sandbox Code Playgroud)