LoginSignup
tora0101
@tora0101

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

LIKE 演算子 PDO

解決したいこと

PDO LIKE演算子で検索指定していないintが入ってしまい空の値も表示されてしまう。

下記のようにPDOにてコードを致しましたが、$dataをvar_dumpするとintが混ざります。
なぜこのような影響が出ているのかご教示頂けますと幸いです。

コード一覧

    public function searchPDO($username, $POST){
        $sql = " SELECT * FROM vocab_idioms_slang WHERE username='".$username."' AND delete_flg =0 AND vocab LIKE ?";
        $stmt = $this->dbh->prepare($sql);
        $res = $stmt->execute(array('%'.$POST.'%'));
        
        if($res == false){
            $this->catchError($stmt->errorInfo());
        }

        $data =[];
        while($result = $stmt->fetch(\PDO::FETCH_ASSOC)){
            $data[] = array_push($data,$result);
        }

        var_dump($data);

        return $data;

下記のvar_dumpの奇数のindexを拝見すると、必ずintが含まれております。
LIKEにてvocabというcolumnのみを指定しており、int型も数字も含まれていないのになぜこのような影響が出るのでしょうか。
vocab columnには文字列しか入っておらず、select文が間違っているのでしょうか。
POSTには今回は aという文字列、$usernameにはtotoという文字列が入っているおります。

array(20) { [0]=> array(8) { ["user_id"]=> string(1) "8" ["kinds"]=> string(10) "Vocabulary" ["username"]=> string(4) "toto" ["vocab"]=> string(1) "a" ["translate"]=> string(1) "a" ["example"]=> string(0) "" ["image"]=> string(5) "a.jpg" ["delete_flg"]=> string(1) "0" } [1]=> int(1) [2]=> array(8) { ["user_id"]=> string(1) "9" ["kinds"]=> string(10) "Vocabulary" ["username"]=> string(4) "toto" ["vocab"]=> string(1) "a" ["translate"]=> string(1) "a" ["example"]=> string(0) "" ["image"]=> string(5) "a.jpg" ["delete_flg"]=> string(1) "0" } [3]=> int(3) [4]=> array(8) { ["user_id"]=> string(2) "11" ["kinds"]=> string(10) "Vocabulary" ["username"]=> string(4) "toto" ["vocab"]=> string(1) "a" ["translate"]=> string(1) "a" ["example"]=> string(0) "" ["image"]=> string(5) "a.jpg" ["delete_flg"]=> string(1) "0" } [5]=> int(5) [6]=> array(8) { ["user_id"]=> string(2) "12" ["kinds"]=> string(10) "Vocabulary" ["username"]=> string(4) "toto" ["vocab"]=> string(1) "a" ["translate"]=> string(1) "a" ["example"]=> string(0) "" ["image"]=> string(0) "" ["delete_flg"]=> string(1) "0" } [7]=> int(7) [8]=> array(8) { ["user_id"]=> string(2) "13" ["kinds"]=> string(10) "Vocabulary" ["username"]=> string(4) "toto" ["vocab"]=> string(2) "aa" ["translate"]=> string(1) "a" ["example"]=> string(0) "" ["image"]=> string(0) "" ["delete_flg"]=> string(1) "0" } [9]=> int(9) [10]=> array(8) { ["user_id"]=> string(2) "16" ["kinds"]=> string(10) "Vocabulary" ["username"]=> string(4) "toto" ["vocab"]=> string(1) "a" ["translate"]=> string(3) "あ" ["example"]=> string(0) "" ["image"]=> string(0) "" ["delete_flg"]=> string(1) "0" } [11]=> int(11) [12]=> array(8) { ["user_id"]=> string(2) "17" ["kinds"]=> string(10) "Vocabulary" ["username"]=> string(4) "toto" ["vocab"]=> string(1) "a" ["translate"]=> string(1) "a" ["example"]=> string(0) "" ["image"]=> string(23) "eat-vector-21865168.jpg" ["delete_flg"]=> string(1) "0" } [13]=> int(13) [14]=> array(8) { ["user_id"]=> string(2) "20" ["kinds"]=> string(10) "Vocabulary" ["username"]=> string(4) "toto" ["vocab"]=> string(2) "fa" ["translate"]=> string(2) "fa" ["example"]=> string(0) "" ["image"]=> string(0) "" ["delete_flg"]=> string(1) "0" } [15]=> int(15) [16]=> array(8) { ["user_id"]=> string(2) "25" ["kinds"]=> string(6) "Idioms" ["username"]=> string(4) "toto" ["vocab"]=> string(1) "a" ["translate"]=> string(1) "a" ["example"]=> string(1) "a" ["image"]=> string(0) "" ["delete_flg"]=> string(1) "0" } [17]=> int(17) [18]=> array(8) { ["user_id"]=> string(2) "27" ["kinds"]=> string(10) "Vocabulary" ["username"]=> string(4) "toto" ["vocab"]=> string(2) "fa" ["translate"]=> string(6) "fafafa" ["example"]=> string(0) "" ["image"]=> string(0) "" ["delete_flg"]=> string(1) "0" } [19]=> int(19) }  

色々と調べましたが答えに辿り着けず、ご教示頂けますと幸いです。

0

1Answer

$data[] = array_push($data,$result);

array_pushは第1引数の配列に第2引数を追加する関数で、戻り値は処理後の配列の中の要素の数を返します。
上記のコードは$data$resultを追加したあと、さらに戻り値である要素数を$dataに追加しています。
なのでSQL取得した行と整数値が交互に入っています。

配列の最後に値を追加するのは、どちらかで大丈夫です。

array_push($data, $result);
// もしくは
$data[] = $result;
0

Your answer might help someone💌