2017-01-29 4 views
0

私のクラスのクエリメソッドを作成し、それはDBからデータを取得することで動作しますが、を挿入するとが動作しません。クエリメソッドを再利用してPHPのデータベースからデータを挿入およびフェッチするにはどうすればよいですか?

私の問い合わせ方法はこれです。

function query($sql, $params = array()) { 
     $query = $this->_conn->prepare($sql); 
     if(count($params)) { 
      $position = 1; 
      foreach($params as $param) { 
       $query->bindValue($position, $param); 
       $position++; 
      } 
     } 

     if($query->execute()) { //error is here based on the error message: SQLSTATE[42000] 
      $result = $query->fetchAll(PDO::FETCH_ASSOC); 
     } else { 
      return false; 
     } 


     return $result; 
    } 

上記のクエリを呼び出すと、エラーが発生しました。あなたの関数についてまず

function insert($table, $data) { 
     if(count($data)) { 
      $keys = array_keys($data); 
      $values = ""; 

      $counter =1; 
      foreach($data as $field) { 
       $values .= "?"; 
       if($counter < count($field)) { 
        $values .= ", "; 
       } 
       $counter++; 
      } 
      $sql = "INSERT INTO {$table} (`". implode('`, `',$keys) ."`) VALUES {$values}"; 
      if($this->query($sql, $data)) { //calling the method above 
       return true; 
      } 
     } 

     return false; 
    } 

I think the error is in the query method and it only works fetching data. How can I make it flexible(like both working on fetching and insert etc. data)?

+0

UPDATE/INSERTステートメントは結果セットを返しません。ステータスはTRUE(正常に機能しています)です(動作しませんでした) – RiggsFolly

+0

PS:今後、COMPLETEエラーメッセージを表示してください。 – RiggsFolly

+0

@RiggsFolly致命的なエラー: 'PDOException' with message 'SQLSTATE [42000]:構文エラーまたはアクセス違反:1064 SQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックし、正しい構文が '???'の近くで使用するようにしてください。 1行目のC:\ wamp64 \ www \ security \ db.phpの行番号 ** $ query-> execute()の部分のquery()メソッドにエラーがあります –

答えて

0

。それは同時に過剰であり、限られている。何が本当に必要なのはあなたが単に

$db->query($sql)->fetchAll(); 

のようにそれを呼び出すことによって、あなたの既存の機能を得ることができるでしょうが、それを含むクエリの他の種類とそれを呼び出すことが可能になります

function query($sql, $params = array()) { 
    $query = $this->_conn->prepare($sql); 
    $query->execute($params); 
    return $query; 
} 

です名前付きプレースホルダと位置指定されたプレースホルダを使用することはもちろん、fetch()やrowCount()などの他の連鎖メソッドを使用することもできます。

エラーメッセージが表示されます。 明らかにあなたの関数とは関係ありませんが、QUERYを実行すると実行します。クエリメソッドを再利用してクエリを挿入する方法を質問するとき、の真の挿入クエリを提供する必要があります。間違った結果をもたらす不器用なPHPコードではありません。あなたの行為があなたの言葉に関連していることを確認することは非常に重要です。挿入クエリをテストしたいですか? PHPコードではなく、クエリを操作してください!

最後に、ヘルパーを挿入します。構文に関する明白な問題は別として、本質的にはprone to SQL injectionです。したがって、識別子をエスケープしたり、より良い形でホワイトリストを作成する必要があります。

関連する問題