かねてから教えていただいているDELETE文の結果がelseになってしまう件で、エラーを検出する詳細な方法を教えていただきエラーを
errorInfo=Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELETE FROM mst_staff WHERE code = '1'' at line 1 )
bool(false) と確認させていただきました私なりに削除を実行するSQL文に構文エラーがあると解釈しましたが正しい構文が分からないので教えていただけませんでしょうか。
削除システムは、登録順にcodeを積み上げ全角8字以内の名前とmd5方式にした32桁のパスワードを名前につけたラジオボタンで選択したレコードを削除するものです他にコードの利用はありません。
問題のSQL文
$sql = 'DELETE FROM mst_staff WHERE code = ?';
$stmt = $dbh->prepare($sql);
$data[0] = $staff_code;
全体を示します。
DB構造
mysql> show fields from mst_staff;
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| code | int(11) | NO | PRI | NULL | auto_increment |
| staff_namae | varchar(16) | NO | | NULL | |
| staff_pass | varchar(32) | NO | | NULL | |
+-------------+-------------+------+-----+---------+----------------+
一覧
$dsn='mysql:dbname=shopdb;host=localhost';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->query('SETNAMES utf8');
$sql = 'SELECT code,staff_namae FROM mst_staff WHERE 1'; $stmt=$dbh->prepare($sql); $stmt->execute(); $dbh = null; print 'スタッフ一覧<br /><br />'; print '<form method="post" action="staff_branch.php">'; while(true) { $rec = $stmt->fetch(PDO::FETCH_ASSOC); if($rec==false) { break; } print '<input type="radio" name="staffcode" value="'.$rec['code'].'">'; print $rec['staff_namae']; print '</br>'; } print '</br>'; print '<input type="submit" name="edit" value="修正">'; print '<input type="submit" name="delete" value="削除">';
見えないページ"staff_branch.php"で修正と削除の処理分岐 <?php
if(isset($_POST['edit'])==true)
{
if(isset($_POST['staffcode'])==false)
{
header('Location:staff_ng.php');
}
$staff_code=$_POST['staffcode'];
header('Location:staff_edit.php?staffcode='.$staff_code);
}
if(isset($_POST['delete'])==true)
{
if(isset($_POST['staffcode'])==false)
{
header('Location:staff_ng.php');
}
$staff_code=$_POST['staffcode'];
header('Location:staff_delete.php?staffcode='.$staff_code);
}
?>
削除確認
try
{
if (isset($_GET["staffcode"])) {
$staff_code= $_GET['staffcode'];
}
$dsn='mysql:dbname=shopdb;host=localhost';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->query('SETNAMES utf8');
$sql = 'SELECT staff_namae FROM mst_staff WHERE code=?';
$stmt=$dbh->prepare($sql);
$data[0]=$staff_code;
$stmt->execute($data);
$rec = $stmt->fetch(PDO::FETCH_ASSOC);
$staff_namae=$rec['staff_namae'];
$dbh = null;
}
catch (Exception $e)
{
print 'ただいま障害により、たいへんご迷惑をお掛けしております。';
exit();
}
?>
<h3>スタッフ削除</h3><br /> <br /> <br /> <h3>スタッフコード</h3><br /> <?php print $staff_code;?> <br /> <br /> <h3>スタッフ名</h3><br /> <?php print $staff_namae;?> <br /><br /> <h3>みのスタッフを削除してもよろしいですか?</h3><br /><br /> <form method="post" action="staff_delete_done.php"> <input type="hidden" name="staffcode" value="<?php print $staff_code;?>"> <br> <input type="hidden" onclick="history.back()" value="戻る"> <br /><br /> <input type="submit" value="削除実行"> </form> </div> </body> 削除実行 staff_delete_done.php <?phptry
{
if (isset($_POST["staff_code"])) {
$staff_code = $_POST['staff_code'];
}
$dsn='mysql:dbname=shopdb;host=localhost';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->query('SETNAMES utf8');
$sql = 'DELETE FROM mst_staff WHERE code = ?';
$stmt = $dbh->prepare($sql);
$data[0] = $staff_code;
$flag = $stmt->execute(array($data[0]));
print '<p>errorInfo='.print_r($stmt->errorInfo(), true)."</p>\n";
$dbh = null;
var_dump($flag);
print$flag;
if ($flag){
print ('データーを削除しました。<br />');
}
else{
print ('データーを削除できませんでした。<br />');
}
}
catch(Exception $e)
{
print 'ただいま障害により、たいへんご迷惑をお掛けしております。';
exit();
}
?>
<h3><a href="staff_list.php">スタッフ一覧へ</a></h3>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/12/25 03:19