teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

修正

2020/02/04 06:45

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -1,4 +1,7 @@
1
+ エラーからすると[PDO::query](https://www.php.net/manual/ja/pdo.query.php)の返却値がfalseなんでしょう
2
+ > PDO::query() は、PDOStatement オブジェクトを返します。 失敗した場合は FALSE を返します。
3
+
1
- 直に実行して通るSQLかどうかは確認してください。
4
+ 直に実行して通るSQLかどうかは必ず確認してください。phpMyAdminからも実行できます。
2
5
  直に実行して想定通りの情報が得られなければ当然PHPから実行しても
3
6
  想定の結果は得られません。
4
7
 

1

修正

2020/02/04 06:45

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -1,15 +1,24 @@
1
1
  直に実行して通るSQLかどうかは確認してください。
2
+ 直に実行して想定通りの情報が得られなければ当然PHPから実行しても
3
+ 想定の結果は得られません。
4
+
2
5
  シングルクォートはSQLにおいては「文字列」を表します。
3
6
  テーブル名を「文字列」として扱ってませんか?
4
- テーブル名やカラム名は通常は何も囲まないか丁寧にするなら````(バッククォート2つ)で囲みます。
7
+ テーブル名やカラム名は通常は何も囲まないか丁寧にするなら
8
+ ```
9
+ `table_nawe`
10
+ ```
11
+ のように(バッククォート2つ)で囲みます。
5
12
  ※全角名称採用は考慮しません
6
13
 
7
- また、直に$_POSTを参照するのではなく[filter_input](https://www.php.net/manual/ja/function.filter-input.php)を採用することで、`if(@$_POST["Name"] != ""){ `というエラーを意図的にスキップする実装を避けることができます。
14
+ また、直に$_POSTを参照するのではなく[filter_input](https://www.php.net/manual/ja/function.filter-input.php)を採用することで、
15
+ `if(@$_POST["Name"] != ""){ `というエラーを意図的にスキップする実装を避けることができます。
8
16
  エラーはむしろ出すべきで、提示のようにスキップする実装は避けるべきです。
9
17
 
10
18
  また、SQLインジェクションが可能です。
11
19
  prepare→bindValue→executeの流れを作りましょう。
12
20
  また、try-catchでPDOExeptionを捕捉する仕組みは入れましょう。
21
+ DBはPHPからすると外部のアプリケーションです。
13
- DBはPHPからすると外部のアプリケーションです。ちゃんと拾ってあげる仕組みにしないと何が起きているのか把握することはできません。
22
+ ちゃんと拾ってあげる仕組みにしないと何が起きているのか把握することはできません。
14
23
 
15
24
  [PHPでデータベースに接続するときのまとめ](https://qiita.com/mpyw/items/b00b72c5c95aac573b71)