yamata.programmer.blog

28歳 プログラマになるために通った道に落ちていた情報を発信します!

【Laravel×MySQL】Argument 1 passed to Illuminate\Database\Connection::prepareBindings() 解決方法

今回の記事を読んで欲しい方

  • LaravelとMySQLをして開発をしており、タイトルのエラーが出ている方

今回はタイトルのエラーが出ている方向けに解決方法を書いていきます。

LaravelでMAMPを使用している方向けのSQL設定方法は以下の記事をご覧下さい。

www.yamata-pgblog.com

 

結論:値を配列として渡す必要がある

Laravelを使わずにPHPのみでMySQLに接続して値を取得する方法で躓いたことがありますが、解決方法は結構簡単でした。

www.yamata-pgblog.com

$param = [
    'mailaddress' => $request->mailaddress,
'password' => $request->pass, ]; $items = DB::select('select * from people where mail = :mailaddress and pass = :password ',$param);

配列を用意して、テーブルから自動で増加するID含めて全てを取得しているコードです。

$tasks = DB::select('select * from task where people_id = :id',$id);

コードはそれぞれ作っている用に変更して下さい。

ToDoアプリを作成しており、それぞれのIDで予定を取り出す方法を考えて、コードを書いておりました。

上記のコードは例ですが、SQLでselectをして値を取り出すときに、どうしてもこの記述でどうしてもタスクの情報を取り出せずに、2時間ほど悩んでおりました。

解決方法ですが、取得したデータ(配列)を一旦foreach文で配列に対してのキーを取り出します。

foreach($items as $data){
    $id = $data->id;
}

もっと調べればいい書き方があったのだと思いましたが、この方法が一番手っ取り早かったのでこの方法を使いました。

Laravelだと、値を配列として渡す必要があります。

ここを見落としておりました。

$tasks = DB::select('select * from task where people_id = :id',[$id]);

本当に簡単にいうと、[]かっこでくくればいいという非常に簡単な解決です。

 

今回のまとめ

・何らかのデータを配列に変換する(配列を用意するかforeachで取り出す)

$param = [
    'mailaddress' => $request->mailaddress,
'password' => $request->pass, ];
foreach($items as $data){
    $id = $data->id;
}

・[]のかっこでくくる

$tasks = DB::select('select * from task where people_id = :id',[$id]);

簡単ですが、今回は以上です。