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

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

ただいまの
回答率

90.47%

  • PHP

    20806questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    6001questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

出しいDELETE文を教えてください

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,042
かねてから教えていただいている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);  
}  
?>  
削除確認  
<body>  
<div id="contents">  
<?php  

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
   <?php

try
{

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>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

0

DELETE FROM mst_staff WHERE code = '1';

が、通常に実行できるがどうか確認してみると判るのではないかと思います。
このSQLがコマンド上でも実行できるか検証してみては如何でしょうか?

また、一点気になりましたが

$sql = 'DELETE FROM mst_staff WHERE code = ?'; 
$stmt = $dbh->prepare($sql); 
        $data[0] = $staff_code; 
$flag = $stmt->execute(array($data[0])); 


$sql = 'DELETE FROM mst_staff WHERE code = ?;'; 
$stmt = $dbh->prepare($sql); 
        $data[0] = $staff_code; 
$flag = $stmt->execute($data); 

でも同じ動作をすると思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2014/12/24 15:27

    ご回答ありがとうございます。
    ご回答いただいたDELETE FROM mst_staff WHERE code = '1'; が通常に実行できるかためしてみました。
    書き間違いと思われるParse error: syntax error, unexpected 'mst_staff' (T_STRING) in C:\xampp\htdocs\floris_slider\staff_delete_done.php on line 30のエラーが返されました。
    'DELETE FROM mst_staff WHERE code = "1"';と
    'DELETE FROM mst_staff WHERE code = "?"';は、やはり構文エラーの
    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 )が返されました。
    申し訳ございません引き続きよろしくお願いいたします。

    キャンセル

  • 2014/12/24 15:56

    Parse error: syntax error, unexpected 'mst_staff' (T_STRING) が表示されている事から、全角スペースなどがあると思います。

    TaMaMhyu さんのコメントにあるように、SQLを一度Mysqlコマンドなどで実行できるかを確認した方が良いかと思います。
    説明不足で済みません。

    まず問題がプログラムなのかSQL分なのか切り分けてみたら如何でしょうか?

    キャンセル

  • 2014/12/24 16:07

    実際にダブルクオーテーションにしたSQLでのエラーに全角空白が含まれているので、そこは単純に全角空白を半角空白にすれば問題ないはずです。
    DELETE FROM ...

    DELETE FROM ...

    キャンセル

0

takayukiinabaさんの回答にある、「通常に実行できる」と言うのは、PHP上ではなく、mysqlコマンドなどでと言うことだと思います。

追記のエラー内容のSQLはDELETEとFROMの間に全角空白が入っているようなので、エラーが出たのはそれだと思います。
最初のT_STRINGのエラーは文字列のクオートが不正な状態でPHPの構文エラーだと思います。
'でくくった文字列内で'をそのまま使用したためと思われる)

元々のエラー内容のSQLには全角空白が入っていないようなので、エラーが出る原因が不明です…
手元の環境では再現できませんでした。
追記の全角空白入りのものは手元の環境で再現できました。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2014/12/25 12:19

    皆様、ありがとうございました。
    'DELETE FROM mst_staff WHERE code = '?'; をすべて半角小文字で打ち直しましたら正しく動作いたしました。
    いろいろとご助言ありがとうございました。

    キャンセル

関連した質問

  • 解決済

    PHPでMySQLのテーブルのカラム名を取得する

    PHPでMySQLのデータを取得するのはいつもやっているのですが、テーブルのカラム名をPHPで取得するやり方がわかりません。何かいい方法はありますでしょうか?

  • 解決済

    画面遷移なしで編集したいのですが、書き方が全くわかりません。。

    「編集」と「削除」を画面遷移なしで実行したいのですが、ajaxが分からず困っています。どうすれば、意図した結果が得られるでしょうか?>< PHPとMySQLを使っています。 PH

  • 受付中

    PHPでデータベースに接続できない

    phpでmysqlに接続するとエラーになります。 $dsn = 'mysql:dbname=LAA0683016-xxxxx;host= mysqlxxx.phy.lolipop.

  • 解決済

    メールアドレスの重複チェックについて

    下記コードで、アドレスの重複チェックを表示することができました。 DBでuserdataというテーブルにemailというカラムがあり、test@testという値が格納されてます。

  • 解決済

    複数の変数のupdateについて

    各店舗(id)のリーダー(leaders)に、なる(value=2)ならない(value=3)をupdateしたいのですが以下のコードを実行してもカラムの値が変わることはありません

  • 解決済

    MysqlのBlobで保存した画像をPHPで表示したい

    プログラミングを初めて一か月のビギナーです。現在PHPを勉強していて、Mysqlに画像をBlob型で保存したのですが、それをPHPで表示できません。サーバーはロリポップです。以下が

  • 解決済

    データベースへの追加

    先日に引き続きログインシステムの作成を練習してます。 フォームでユーザー名とパスワードを入力して移動すると、 catch部分で設定したエラーが返ってきます。(データベースに追加

  • 解決済

    POSTメゾットを使って「削除」を行う方法

    前提・実現したいこと PHPで従業員管理画面をつくっています。 従業員のデータ削除機能がGETメゾットで作られているので、 これをPOSTメゾットを使ってコードを書き直したいと考え

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

  • PHP

    20806questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    6001questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。