-5
$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 構文にエラーがあります。near '["gamedate"],@hometeam = $_POST["hometeam"],@visitors = $_POST["visitors"],@resu' を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

何か案は?ありがとう。

4

4 に答える 4

5

まず、php'でのシングル ( ) とダブル ( ")で囲まれた文字列の違いを学びます。

次に、mysql_関数の使用は推奨されなくなりました。MySQLiまたはPDOを使用します。

したがって、次を使用する必要があります。

"SET @gamedate = '{$_POST['gamedate']}'"

でエスケープする代わりに'。または、次のようにします。

'SET @gamedate = "' . mysql_real_escape_string( $_POST['gamedate'], $conn) . '"'

または、正しい方法で行うこともできます (例: を使用PDO::prepare):

$sql = 'SET @gamedate = :gamedate';
$sth = $dbh->prepare($sql); // $dbh is instance of PDO
$sth->execute(array(':gamedate' => '...'));
于 2012-10-10T15:36:51.367 に答える
4

この用途:

mysqli_prepare ( $link , $query );

例:

$mysqli = new mysqli("localhost", "user", "pwd", "db");
$stmt = mysqli_prepare($link, "INSERT INTO games_new
( gamedate, hometeam, visitors, result, matchreport, battedfirst, fieldedfirst, battedfirstruns, battedfirstextras, battedfirsttotal, battedsecond, fieldedsecond, battedsecondruns, battedsecondextras, battedsecondtotal )
VALUES
(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");

mysqli_stmt_bind_param($stmt, "ssssssssssssss",
    $_POST["hometeam"],
    $_POST["visitors"],
    $_POST["result"],
    $_POST["matchreport"],
    $_POST["battedfirst"],
    $_POST["fieldedfirst"],
    $_POST["battedfirstruns"],
    $_POST["battedfirstextras"],
    $_POST["battedfirsttotal"],
    $_POST["battedsecond"],
    $_POST["fieldedsecond"],
    $_POST["battedsecondruns"],
    $_POST["battedsecondextras"],
    $_POST["battedsecondtotal"]
);

mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
mysqli_close($link);
于 2012-10-10T15:43:13.087 に答える
1
$query =
'SET @gamedate = $_POST["gamedate"],' .

これはシングル クォーテーションで囲まれているため、$_POST["gamedate"]評価されません。あなたがしているはずです:

$query =
"SET @gamedate = {$_POST['gamedate']}," .

ただし、$_POSTそのようなパラメーターを直接使用する、最終的に SQL インジェクションによってサイトがハッキングされます。

于 2012-10-10T15:34:54.610 に答える
-2
'@battedsecond = $_POST["battedsecond"],'

単純な引用符を使用しているため、変数を文字列に直接入れることはできません。二重引用符を使用するか、連結を使用してください。

"@battedsecond = {$_POST["battedsecond"]},"
//OR
'@battedsecond = '.$_POST["battedsecond"].','
于 2012-10-10T15:35:25.177 に答える