🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

MySQL

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

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

PHP

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

Q&A

解決済

1回答

4131閲覧

Notice: Array to string conversion の対処方法がわからない

Gshehebnk

総合スコア3

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

MySQL

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

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

PHP

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

0グッド

1クリップ

投稿2020/12/14 09:56

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
初心者です。
Notice: Array to string conversion が出てしまっていて、自分では間違いがわからなかったので質問させていただきます。

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

Notice: Array to string conversion in C:\xampp\htdocs\delete.php on line 25

該当のソースコード

<?php // header('Location: http://localhost/topicsdelete.php'); $dsn = 'mysql:dbname=task;host=localhost'; $user = '*******'; $password = '**********'; try { $dbh = new PDO("mysql:dbname=task;host=localhost", "$user", "$password"); } catch (PDOException $e) { echo 'データベースにアクセスできません!' . $e->getMessage(); exit; } $id = isset($_POST['id']) ? $_POST['id'] : ''; $check = isset($_POST['id']) ? $_POST['id'] : ''; var_dump($_POST['id']); $sql = "DELETE FROM task WHERE id = :id IN (SELECT * FROM task WHERE id = :id)"; // var_dump($sql); $stmt = $dbh->prepare($sql); $params = array(':id' => $_POST['id']); $stmt->execute($params); echo '削除しました'; ?>

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

処理をtry内でおこなってください
エラーモードの設定をしてください
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
そもそもSQL文がおかしいです

投稿2020/12/14 10:04

yambejp

総合スコア116661

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Gshehebnk

2020/12/15 01:13

どこをどう直して$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); をどこに書き込めばいいですか?
yambejp

2020/12/15 01:20

流れ的にはこんな感じです。ラベルの使い回しが本当に必要なら ATTR_EMULATE_PREPARESの設定もした方がよいでしょう try { $dbh = new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,true); $sql = "・・・"; $stmt = $dbh->prepare($sql); $params = array(':id' => $id); $stmt->execute($params); echo '削除しました'; } catch (PDOException $e) { die($e->getMessage()); }
Gshehebnk

2020/12/15 01:29

ご丁寧に解説していただきありがとうございました!
Gshehebnk

2020/12/15 02:27

すみません、またNotice: Array to string conversionが出てしまいました
yambejp

2020/12/15 02:32 編集

行番号が表示されると思いますが、その行は具体的にどこでしょう? 念の為$_POST['id']の値も確認してみてください print_r($_POST['id']);
Gshehebnk

2020/12/15 02:41

Notice: Array to string conversion in C:\xampp\htdocs\delete.php on line 19 SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s) このエラーが出ています
yambejp

2020/12/15 02:47 編集

うまく伝わっていないようですみません その19行目のソースは具体的になんと書いたのか?が知りたいです また最初に書いたとおりSQL文がおかしいので いまのままではどうやっても無理です $sql = "DELETE FROM task WHERE id = :id”; だけじゃいけないんですか?
Gshehebnk

2020/12/15 02:49

$dsn = 'mysql:dbname=task;host=localhost'; $user = ''; $password = ''; $id = isset($_POST['id']) ? $_POST['id'] : ''; $check = isset($_POST['id']) ? $_POST['id'] : ''; var_dump($_POST['id']); try { $dbh = new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,true); //DELETE文は、INを使ってPOSTされたIDを1回のSQLで削除する。 $sql = "DELETE FROM task WHERE id = :id IN (SELECT * FROM task WHERE id = :id)"; $stmt = $dbh->prepare($sql); $params = array(':id' => $_POST['id']); $stmt->execute($params); //ここが19行目です echo '削除しました'; } catch (PDOException $e) { die($e->getMessage()); } ?> いまこの状態です
yambejp

2020/12/15 02:51

しつこくて申し訳ないのですが、19行目はどこですか?
yambejp

2020/12/15 02:51

「SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)」 の方は、SQL文がおかしいですというエラーです
Gshehebnk

2020/12/15 02:52

$stmt->execute($params); のところです
yambejp

2020/12/15 02:54

print_r( $_POST['id']); で、表示される値を転記してください
Gshehebnk

2020/12/15 03:01

array(4) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" [3]=> string(1) "4" } Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 ) Notice: Array to string conversion in C:\xampp\htdocs\delete.php on line 20 削除しました これであっていますか?
yambejp

2020/12/15 03:18

大方予想通りでしたが、idを複数指定するなら方法を変えないといけません こんな感じです <?PHP $id=filter_input(INPUT_POST,"id",FILTER_VALIDATE_INT,FILTER_REQUIRE_ARRAY); if(!is_null($id) and count($id)>0){ $sql = "DELETE FROM task WHERE id in (".implode(",",array_fill(0,count($id),"?")).")"; print_r($sql); try { $dbh = new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $dbh->prepare($sql); $stmt->execute($id); echo '削除しました'; } catch (PDOException $e) { die($e->getMessage()); } ?> <form method="post"> <label><input type="checkbox" name="id[]" value="1">1</label> <label><input type="checkbox" name="id[]" value="2">2</label> <label><input type="checkbox" name="id[]" value="3">3</label> <label><input type="checkbox" name="id[]" value="4">4</label><br> <input type="submit" value="send"> </form>
Gshehebnk

2020/12/15 06:01

何度も説明してくださりありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問