mysqlのデータをPDOでDELETEできない
PDOオブジェクト(PHP)を使用したmysqlのデータ削除について、質問させてください。
PDOオブジェクトを使用して、mysqlのデータ読み込み・削除を行っています。
特定のデータを読み込み、処理を行わせた後、対象のデータの削除をしたいのですが
読み込みは出来るのに、削除で失敗してしまいます。
処理を行わせるSQLをvar_dumpで出力させ、
それを直接phpMyAdminでSQL実行してみたのですが、
問題なく削除が行われています。
SQLの問題ではなく、PHP側の問題だと思うのですが、
解決方法が見つかっておりません。
知恵を貸していただけないでしょうか。
$post_data = explode('¥t', $_POST['data_array']);
$user_id = $post_data[0];
$account_name = $post_data[1];
$data_id = $post_data[2];
$gunre_id = $post_data[3];
try
{
// DB接続
$dbh = new PDO($serverInfo["SERVER"], $serverInfo["USER"], $serverInfo["PASS"]);
$dbh -> query('SET NAMES utf8');
// 処理させる対象アカウント情報を取得
$sql_account;
$sql_account = 'SELECT * FROM '. $serverInfo['TBL_ACCOUNT']. ' WHERE GUNRE_ID = :gunre';
}
$stmt_account = $dbh -> prepare($sql_account);
$stmt_account -> bindParam(':gunre', $gunre_id, PDO::PARAM_STR);
$stmt_account -> execute();
while($account = $stmt_account -> fetch(PDO::FETCH_ASSOC))
{
// 取得してきたデータを使用して処理
// この処理は正常に行われているので、SELECTは正常に行われていると考えられます
}
// 処理が完了したら、データを削除
// ↓ここで組み立てたSQLを出力し、phpMyAdminでSQL実行すると、データは削除されました
$sql_delete = 'DELETE FROM '. $serverInfo['TBL_DATA']. ' WHERE USER_ID = "'. $user_id. '" AND ACCOUNT_NAME = "'. $account_name. '" AND DATA_ID = "'. $data_id. '"';
$stmt_delete = $dbh -> prepare($sql_delete);
// ↓元々はbindParamで指定していたのですが、処理が出来なかったので
// $SQL_deleteの中に値を埋め込み、処理を行わせました。結局出来なかったのですが・・・
// $stmt_delete -> bindParam(':id', $user_id, PDO::PARAM_STR);
// $stmt_delete -> bindParam(':account', $account_name, PDO::PARAM_STR);
// $stmt_delete -> bindParam(':data', $data_id, PDO::PARAM_STR);
$result = $stmt_delete -> execute();
var_dump($result); // ←出力結果は「false」です
} catch (Exception $ex) {
echo '<font color="red">システムエラーが発生しました</font><br />';
exit();
}
以上、よろしくお願いします。
お礼
説明不足で申し訳ありません。 >select文では、fetchAll() などで、全行取得してみないと、実際に返された行数を知る方法は有りませんけど? 正にこのSELECT文での取得行数をカウントしたいと考えています。 PHPマニュアルのPDOの項(http://php.net/manual/ja/pdostatement.rowcount.php)では 「この振る舞いは全てのデータベースで保証されていません。」 と、非推奨風に書かれていたので、rowCount以外で別途行数を取得する方法は無いものかと探しておりました。 select count(*) from テーブル名 WHERE 条件 で行数を得る事が出来るのですね。 カウント数と同時に、SELECT結果も得る方法は御座いませんでしょうか?
補足
すみません。 マニュアルを再度よく読み返した所、解決しました。 色々と要領を得ず、申し訳ありませんでした。 お返事ありがとうございました。