回答編集履歴

4 誤字修正

tanat

tanat score 10657

2019/11/25 11:06  投稿

追記・修正依頼欄
> 早速に有難うございます。上手くいかない部分ですが、改定後の上部、データベースの読み込みはできているのですが、 ”//queryのデータ”以下が実装できなく、検索結果が1と表記されてしまいます。
> アドバイスお待ちしております。
と言うのがまだよくわかりませんが、
`addcslashes`について`addslashes`と誤解していたので削除
そもそも論として
```PHP
 //扱いやすい形に変える
 $result = [];
 while ( $row = $UserDataSet->fetch(PDO::FETCH_ASSOC)) {
   $result[] = $row;
 }
 return $result;
 $UserDataSet->execute();
```
で、
SQLが実行されるのは
`$UserDataSet->execute();`
なのに、`return`より後に記述されているのでSELECT文が実行されていません。
---
まずは[PHPマニュアル](https://www.php.net/manual/en/pdostatement.execute.php)を参考にして、最低限の機能とコードでPDOの挙動について把握されることをお勧めします。
---
``` $qPart = array_fill( 0, count( $userData ), "(?, ?, ?, ?, ?)" );```
```PHP
$qPart = array_fill( 0, count( $userData ), "(?, ?, ?, ?, ?)" );
```
↑`$userData`が未定義なので
```foreach ( $userData as $row ) { //bind the values one by one```
```
foreach ( $userData as $row ) { //bind the values one by one
```
↑foreachの中の処理が多分実行されていない
```   $stmt->bindValue( $i++, $row[ '%' . preg_replace( '/(?=[!_%])/', '!', $search_name ) . '%' ], PDO::PARAM_STR );```
```PHP
$stmt->bindValue( $i++, $row[ '%' . preg_replace( '/(?=[!_%])/', '!', $search_name ) . '%' ], PDO::PARAM_STR );
```
↑`$stmt`も未定義なので、foreachの処理が実行されたらエラーになるはず
3 補足

tanat

tanat score 10657

2019/11/25 10:56  投稿

追記・修正依頼欄
> 早速に有難うございます。上手くいかない部分ですが、改定後の上部、データベースの読み込みはできているのですが、 ”//queryのデータ”以下が実装できなく、検索結果が1と表記されてしまいます。
> アドバイスお待ちしております。
と言うのがまだよくわかりませんが、
`addcslashes`について`addslashes`と誤解していたので削除
そもそも論として
```PHP
 //扱いやすい形に変える
 $result = [];
 while ( $row = $UserDataSet->fetch(PDO::FETCH_ASSOC)) {
   $result[] = $row;
 }
 return $result;
 $UserDataSet->execute();
```
で、
SQLが実行されるのは
`$UserDataSet->execute();`
なのに、`return`より後に記述されているのでSELECT文が実行されていません。
---
まずは[PHPマニュアル](https://www.php.net/manual/en/pdostatement.execute.php)を参考にして、最低限の機能とコードでPDOの挙動について把握されることをお勧めします。
まずは[PHPマニュアル](https://www.php.net/manual/en/pdostatement.execute.php)を参考にして、最低限の機能とコードでPDOの挙動について把握されることをお勧めします。
---
``` $qPart = array_fill( 0, count( $userData ), "(?, ?, ?, ?, ?)" );```
↑`$userData`が未定義なので
```foreach ( $userData as $row ) { //bind the values one by one```
↑foreachの中の処理が多分実行されていない
```   $stmt->bindValue( $i++, $row[ '%' . preg_replace( '/(?=[!_%])/', '!', $search_name ) . '%' ], PDO::PARAM_STR );```
↑`$stmt`も未定義なので、foreachの処理が実行されたらエラーになるはず
 
2 修正

tanat

tanat score 10657

2019/11/25 10:48  投稿

追記・修正依頼欄
> 早速に有難うございます。上手くいかない部分ですが、改定後の上部、データベースの読み込みはできているのですが、 ”//queryのデータ”以下が実装できなく、検索結果が1と表記されてしまいます。
> アドバイスお待ちしております。
と言うのがまだよくわかりませんが、
とりあえず気づいた点としては、
```PHP
 foreach ( $userData as $row ) { //bind the values one by one
   $UserDataSet->bindValue( $i++, $row[ '%' . addcslashes( $search_name, '\_%' ) . '%' ], PDO::PARAM_STR );
   $UserDataSet->bindValue( $i++, $row[ '%' . addcslashes( $color, '\_%' ) . '%' ], PDO::PARAM_STR );
   $UserDataSet->bindValue( $i++, $row[ '%' . addcslashes( $category, '\_%' ) . '%' ], PDO::PARAM_STR );
 }
```
`addcslashes`について`addslashes`と誤解していたので削除
で、`addcslashes`は使用してはいけません。
また、そもそも論として
そもそも論として
```PHP
 //扱いやすい形に変える
 $result = [];
 while ( $row = $UserDataSet->fetch(PDO::FETCH_ASSOC)) {
   $result[] = $row;
 }
 return $result;
 $UserDataSet->execute();
```
で、
SQLが実行されるのは
`$UserDataSet->execute();`
なのに、`return`より後に記述されているのでSELECT文が実行されていません。
---
まずは[PHPマニュアル](https://www.php.net/manual/en/pdostatement.execute.php)を参考にして、最低限の機能とコードでPDOの挙動について把握されることをお勧めします。
1 補足

tanat

tanat score 10657

2019/11/24 20:52  投稿

追記・修正依頼欄
> 早速に有難うございます。上手くいかない部分ですが、改定後の上部、データベースの読み込みはできているのですが、 ”//queryのデータ”以下が実装できなく、検索結果が1と表記されてしまいます。
> アドバイスお待ちしております。
と言うのがまだよくわかりませんが、
とりあえず気づいた点としては、
```PHP
 foreach ( $userData as $row ) { //bind the values one by one
   $UserDataSet->bindValue( $i++, $row[ '%' . addcslashes( $search_name, '\_%' ) . '%' ], PDO::PARAM_STR );
   $UserDataSet->bindValue( $i++, $row[ '%' . addcslashes( $color, '\_%' ) . '%' ], PDO::PARAM_STR );
   $UserDataSet->bindValue( $i++, $row[ '%' . addcslashes( $category, '\_%' ) . '%' ], PDO::PARAM_STR );
 }
```
で、`addcslashes`は使用してはいけません。
また、そもそも論として
```PHP
 //扱いやすい形に変える
 $result = [];
 while ( $row = $UserDataSet->fetch(PDO::FETCH_ASSOC)) {
   $result[] = $row;
 }
 return $result;
 $UserDataSet->execute();
```
で、
SQLが実行されるのは
`$UserDataSet->execute();`
なのに、`return`より後に記述されているのでSELECT文が実行されていません
なのに、`return`より後に記述されているのでSELECT文が実行されていません。
---
まずは[PHPマニュアル](https://www.php.net/manual/en/pdostatement.execute.php)を参考にして、最低限の機能とコードでPDOの挙動について把握されることをお勧めします。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る