プロが教える店舗&オフィスのセキュリティ対策術

以下のプログラムを実行すると、

Parse error: syntax error, unexpected '$a' (T_VARIABLE), expecting ',' or ')' in /home/sspuser/public_html/result.php on line 39

というエラーメッセージが出ます。どうすればいいですか?

ちなみに39行目は

$result = mysqli_query($link,"INSERT INTO $tablename (summary,in_money,out_money) VALUES("$a","$b","$c"),("$d","$e","$f"),("$g","$h","$i"),("$j","$k","$l")");

です


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>ページタイトル</title>
</head>
<body>

<?php
$hostname = '-------';
$username = '-----';
$password = '------';

$dbname = 'testdb100';
$tablename = 'table09';

$a=$_POST['Txt1'];
$b=$_POST['Txt2'];
$c=$_POST['Txt3'];
$d=$_POST['Txt4'];
$e=$_POST['Txt5'];
$f=$_POST['Txt6'];
$g=$_POST['Txt7'];
$h=$_POST['Txt8'];
$i=$_POST['Txt9'];
$j=$_POST['Txt10'];
$k=$_POST['Txt11'];
$l=$_POST['Txt12'];

$link = mysqli_connect($hostname,$username,$password);
if(! $link){ exit("Connect error!"); }

$result = mysqli_query($link,"USE $dbname");
if(!$result) { exit("USE failed!"); }

$result = mysqli_query($link,"CREATE TABLE $tablename (id INT NOT NULL AUTO_INCREMENT, date TIMESTAMP, summary VARCHAR(20) BINARY, in_money INT, out_money int, PRIMARY KEY(id)) CHARACTER SET utf8");
if(!$result) { exit("TABLE error!"); }

$result = mysqli_query($link,"INSERT INTO $tablename (summary,in_money,out_money) VALUES("$a","$b","$c"),("$d","$e","$f"),("$g","$h","$i"),("$j","$k","$l")");
if(!$result) { exit("INSERT error!"); }

echo "Create db and table and update succeeded!\n";


mysqli_close($link);
?>
<br>
</body>
</html>

A 回答 (2件)

誤: "... "$a" ..."


正: "... \"$a\" ..."

参考)
https://www.php.net/manual/ja/language.types.str …
引用符をリテラルとして指定するには (中略) エスケープする
二重引用符で括られる (中略) その中の変数はパースされます
    • good
    • 0

どの言語で有って同じ事。


""内に"を指定する時はドースルの?ってこと。

"を入れると、終了の"を見做されてしまう。
この不合理を解消する方法が言語毎に用意されている。

エクセルだって同じ。
="abc"のabc内に"を入れてa"bcとしても同じ事が起きる。
エクセルの場合は"を2個連続させて、="a""bc"とする訳。

phpの場合は\"とする、
="a\"bc"の様に。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!