質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.13%

データベースハンドラの使いまわしについて

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 208

前提・実現したいこと

xamppにてPHPとMySQLを使用したページを作っています。ショッピングサイトで買い物かごに入れた商品を購入し、注文データを保存するプログラムを書いています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ


'select last_insert_id()'を変数に代入しようとすると 以下のエラーが発生します。

Parse error: syntax error, unexpected 'select' (T_STRING) in C:\xampp\htdocs\shop\shop_form_done.php on line 85

### 該当のソースコード

php
<?php
session_start();
session_regenerate_id(true);
?>
<!DOCTYPE html>
<html>
<head><meta charset=UTF-8>
<title>xxxxx</title>
</head>
<body>

<?php
try
{

require_once('../common/common.php');

$post = sanitize($_POST);

$onamae=$post['onamae'];
$email=$post['email'];
$postal1=$post['postal1'];
$postal2=$post['postal2'];
$address=$post['address'];
$tel=$post['tel'];

print $onamae.'様'.'<br />';
print 'ご注文ありがとうございました。<br />';
print $email.'にメールを送りましたのでご確認ください。<br />';
print '商品は以下の住所に発送させていただきます。<br />';
print $postal1.'-'.$postal2.'<br />';
print $address.'<br />';
print $tel.'<br />';

$honbun='';
$honbun.=$onamae."様\n\nこの度はご注文ありがとうございました。\n";
$honbun.="\n";
$honbun."ご注文商品\n";
$honbun.="---------------------\n";

$cart=$_SESSION['cart'];
$kazu=$_SESSION['kazu'];
$max=count($cart);

$dsn = 'mysql:host=localhost;dbname=shop;charset=utf8';
$user = 'root';
$password = '';
$dbh = new PDO ($dsn,$user,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

for ($i=0;$i<$max;$i++)
{
$sql = 'SELECT name,price FROM mst_product WHERE code=?';
$stmh=$dbh->prepare($sql);
$data[0]=$cart[$i];
$stmh->execute($data);

$rec = $stmh->fetch(PDO::FETCH_ASSOC);

$name=$rec['name'];
$price=$rec['price'];
$kakaku[]=$price;
$suryo=$kazu[$i];
$shokei=$price * $suryo;

$honbun.=$name.' ';
$honbun.=$price.'円 x';
$honbun.=$suryo.'個=';
$honbun.=$shokei."円\n";

}

$sql='INSERT INTO dat_sales (code_member,name,email,postal1,postal2,address,tel) VALUES(?,?,?,?,?,?,?);
$stmh=dbh->prepare($sql);
$data=array();
$data[]=0;
$data[]=$onamae;
$data[]=$email;
$data[]=$postal1;
$data[]=$postal2;
$data[]=$address;
$data[]=$tel;
$stmh->execute($data);

$sql='select last_insert_id()';
$stmh=$dbh->prepare($sql);
$stmh->execute();
$rec = $stmh->fetch(PDO::FETCH_ASSOC);
$lastcode=$rec['LAST_INSERT_ID()'];

$dbh = null;

for($i=0;$i<$max;$i++)
{
$sql='INSERT INTO dat_sales_product (code_sales,code_product,price,quantity) VALUES (?,?,?,?)';
$stmh=$dbh->prepare($sql);
$data=array();
$data[]=$lastcode;
$data[]=$cart[$i];
$data[]=$kakaku['$i'];
$data[]=$kazu['$i'];
$stmh->execute($data);
}

$dbh = null;

$honbun.="送料は無料です。\n";
$honbun.="--------------------\n";
$honbun.="\n";
$honbun.="代金は以下の口座にお振込みください。\n";
$honbun.="ろくまる銀行 やさい支店 普通口座1234567\n";
$honbun.="\n";
$honbun.="                 \n";
$honbun.=" ~安心のろくまる農園~\n";
$honbun.="\n";
$honbun.="〇〇件六丸郡六丸村123-4\n";
$honbun.="電話 090-6060-xxxx\n";
$honbun.="メールinfo@rokumarunouen.co.jp\n";
$honbun.="                 \n";
//print '<br />';
//print nl2br($honbun);

$title='ご注文ありがとうございます。';
$header='From:info@rokumarunouen.co.jp';
$honbun=html_entity_decode($honbun,ENT_QUOTES,'UTF-8');
mb_language('Japanese');
mb_internal_encoding('UTF-8');
mb_send_mail($email,$title,$honbun,$header);

$title='お客様からご注文がありました。';
$header='From:'.$email;
$honbun=html_entity_decode($honbun,ENT_QUOTES,'UTF-8');
mb_language('Japanese');
mb_internal_encoding('UTF-8');
mb_send_mail('info@rokumarunouen.co.jp',$title,$honbun,$header);
}
catch(Exception $e)
{

print 'ただいま障害により大変ご迷惑をお掛けしております。';
exit();

}

?>
</body>
</html>
```

試したこと

エラーが発生した行より前の分をスペルミスがないか確認しましたが、問題が見つけられませんでした。

補足情報(FW/ツールのバージョンなど)

xampp3.2.4を使用しています。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • maisumakun

    2020/11/20 15:17

    85行目はどの行ですか?

    キャンセル

  • lnavi.bex810vh

    2020/11/20 15:22

    ありがとうございます。真ん中より少し上の
    $sql='select last_insert_id()';
    と小文字でセレクト文を発行している行になります。

    キャンセル

回答 1

checkベストアンサー

+1

$sql='INSERT INTO dat_sales (code_member,name,email,postal1,postal2,address,tel) VALUES(?,?,?,?,?,?,?);


上記のコードですが、終端の'(シングルコーテーション)がないため、以後の行も、文字列定数定義が続いているとみなされています。

$sql='select last_insert_id()';


その為、上記のコードは、「$sql=」までが文字列定数、その直後に、selectという、解釈不能なコードが続いていると解釈されています。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/11/20 15:34

    ご回答ありがとうございます。おっしゃられた通りで間違っていました。お騒がせして申し訳ございません。
    ありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る