度々申し訳ありません。PHPによりデータベースに書き込む処理(insrt.php)が出来ていたのですが、度々接続環境?が変わったせいなのか、SQL文に問題があるのか、1週間で2度ほどデーターベースにログインできなくなる現象が続いています。config.inc.phpなどでは解決できないため、XAMPPで2度再インストールしその度にデータベースを作り直しています。それの影響なのか、問題のなかったphp側でもエラーをはくようになり、データベースを確認しましたが、テーブルからカラム名まで前回と変わりません。
出ているエラーは下記の通りです。
Fatal error: Uncaught Error: Call to a member function bindParam() on bool in C:\xampp\htdocs\insert.php:53 Stack trace: #0 {main} thrown in C:\xampp\htdocs\insert.php on line 53
53行目 $stmt -> bindParam(':workday',$row['workday'],PDO::PARAM_STR);
ちょうど、bindParamで各値を変数から代入しているシーンですが、var_dump($json);も取れていますし、$jsonから取り出し各変数($workday・・・・・)に代入した後もvar_dump($各変数);で見ても値が取れています。
どこが原因とみるのがよろしいのでしょうか?
insert.php
1<head> 2 <link rel="stylesheet" href="css/import.css" type="text/css"> 3 <link href="https://fonts.googleapis.com/css?family=M+PLUS+1p&display=swap" rel="stylesheet"> 4 <title>インポート完了</title> 5 <script type="text/javascript"> 6 </script> 7</head> 8<?php 9$data = array(); 10function add_person($workday, $workgroup, $personal, $product, $createcnt, $unit, $bestbydata, $remarks, $worktime, $breaktime){ 11$data []= array( 12'workday' => $workday, 13'workgroup' => $workgroup, 14'personal' => $personal, 15'product' => $product, 16'createcnt' => $createcnt, 17'unit' => $unit, 18'bestbydata' => $bestbydata, 19'remarks' => $remarks, 20'worktime' => $worktime, 21'breaktime' => $breaktime 22); 23} 24try{ 25$pdo = new PDO('mysql:host=localhost;dbname=workinfo;charset=utf8', 'root','root', 26array(PDO::ATTR_EMULATE_PREPARES => false)); 27} catch (PDOException $e) { 28 exit('データベース接続失敗。'.$e->getMessage()); 29} 30//locationの取得 31$location = $_REQUEST['location']; 32//JSON形式の$data配列を取り出す 33$json= $_REQUEST['json']; 34$json = json_decode($json,true); 35 36foreach ($json as $row) { 37 $workday = $row['workday']; 38 $workgroup = $row['workgroup']; 39 $personal = $row['personal']; 40 $product = $row['product']; 41 $createcnt = $row['createcnt']; 42 $unit = $row['unit']; 43 $bestbydata = $row['bestbydata']; 44 $remarks = $row['remarks']; 45 $worktime = $row['worktime']; 46 $breaktime = $row['breaktime']; 47} 48$workday =substr($row['workday'],0,10); 49$sql = "INSERT INTO $location (workday, workgroup, personal, product, createcnt, unit, bestbydata, remarks, worktime, breaktime)Values(:workday, :workgroup, :personal, :product, :createcnt, :unit, :bestbydata, :remarks, :worktime, :breaktime)"; 50foreach ($json as $row) { 51 $stmt = $pdo -> prepare($sql); 52 $stmt -> bindParam(':workday',$row['workday'],PDO::PARAM_STR); 53 $stmt -> bindParam(':workgroup',$row['workgroup'],PDO::PARAM_STR); 54 $stmt -> bindParam(':personal',$row['personal'],PDO::PARAM_STR); 55 $stmt -> bindParam(':product',$row['product'],PDO::PARAM_STR); 56 $stmt -> bindParam(':createcnt',$row['createcnt'],PDO::PARAM_STR); 57 $stmt -> bindParam(':unit',$row['unit'],PDO::PARAM_STR); 58 $stmt -> bindParam(':bestbydata',$row['bestbydata'],PDO::PARAM_STR); 59 $stmt -> bindParam(':remarks',$row['remarks'],PDO::PARAM_STR); 60 $stmt -> bindParam(':worktime',$row['worktime'],PDO::PARAM_STR); 61 $stmt -> bindParam(':breaktime',$row['breaktime'],PDO::PARAM_STR); 62 $stmt->execute(); 63} 64?> 65<h1>以下の内容で登録が完了しました。</h1> 66<h2><a href=index.php>TOPページ</a></h2> 67<table border ="1" class="table"> 68<tr> 69<th>グループ</th> 70<th>担当者</th> 71<th>製造製品</th> 72<th>生産量</th><!--単位も含める--> 73<th>賞味期限</th> 74<th>備考</th> 75<th>就業時間</th> 76<th>休憩時間</th> 77</tr> 78<?php foreach( $json as $row ) { ?> 79<tr> 80<td><?php echo( $row['workgroup'] ); ?></td> 81<td><?php echo( $row['personal'] ); ?></td> 82<td><?php echo( $row['product'] ); ?></td> 83<td><?php echo( $row['createcnt'].$row['unit'] ); ?></td> 84<td><?php echo( $row['bestbydata'] ); ?></td> 85<td><?php echo( $row['remarks'] ); ?></td> 86<td><?php echo( $row['worktime'] ); ?></td> 87<td><?php echo( $row['breaktime'] ); ?></td> 88</tr> 89<?php } ?> 90</table> 91</body> 92</html> 93
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。