0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHPでSQL文を書いて実行するとなんかエラーが出ていた話

Last updated at Posted at 2024-09-17

はじめに

前にPHPでSQL文を変数に代入して実行しようとしていると、SQL文はあっているはずなのになぜかHTTP ERROR 500が返ってきていました。

原因のコード
PHP
 $sql = "INSERT INTO sample_table (id,name,age,birthday) VALUES ({$_POST['id']},"{$_POST['name']}",{$_POST['age']},"{$_POST['birthday']}")";

原因

原因はおそらく、"{$_POST['name']}"のダブルクォーテーションがあることで、この時点で変数の値が終了しているという判定になったからだと考えられます。

解決方法

"{$_POST['name']}"や、"{$_POST['birthday']}"のダブルクォーテーションをシングルクォーテーションに置き換えることで解決しました。

PHP
$sql = "INSERT INTO sample_table (id,name,age,birthday) VALUES ({$_POST['id']},'{$_POST['name']}',{$_POST['age']},'{$_POST['birthday']}')";

まとめ

この作業をしているとき、私はVIエディタで編集をしていたので初歩的なミスかもしれませんが、気づくのが遅れました。VSCodeなどの高度なエディタだと赤文字で知らせてくれるかもしれないので、VSCodeなどを使うようにすることでもエラーを減らせるかもしれないです。

おまけ

このエラーについて調べていると、シングルクォーテーションとダブルクォーテーションで意味合いが少し異なるらしいのでまとめます。
' 'だとくくってある文字はすべて文字列として認識されるので変数があってもそれは文字列として認識されます。
対して" "だと文字列の中に変数があるとそれは変数内の値が認識されます。
つまり、変数を扱いたい場合は" "でくくらないといけないらしいですね。
いままであまり考えずにしていたので勉強になりました。

追記

このコードを書いているときはSQLインジェクションなどのセキュリティについては一切考えていないのでブレースホルダーを使用するなどの対策をするようにしましょう。

参考資料

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?