2

これは私の最初の投稿です。サイト内を検索しましたが、残念ながら一致するものはありませんでした。とにかく、クラスで名前付きパラメーターを使用する方法を知りたいです。したがって、pdoの基本形式は次のようなものです。

$query = $bdd->prepare('SELECT * FROM table WHERE login = :login AND pww = :pww');
$query->execute(array('login' => $login, 'pww' => $pww));

パラメータの数に関係なく、これをクラスに統合したいと思います。現在、私はこのコードを持っています

http://pastebin.com/kKgSkaKt

パラメータについては、次のようなものを使用します(これは間違っており、注入に対して脆弱です)

require_once 'classes/Mysql.class.php';
$mysql = new Mysql();
$sql = 'SELECT * FROM articles WHERE id = '.$_GET['id'].' LIMIT 1';
$data = $mysql->select($sql);

ありがとう。

4

1 に答える 1

0

だから私はそれを理解したようです、トリックは関数にオプションのパラメーターを追加することでした、あなたが準備されたステートメント(名前付きパラメーター)を扱う必要があるときはいつでもそれを使用します。つまり、関数は次のようなものです

public function selectAll($reqSelect, $param = null) {
                $result = parent::prepare($reqSelect);
          //Check whether the parameter was passed or not
                if (is_null($param)) {
                    $result->execute();
                    $resultat = $result->fetchAll();
                    return $resultat;
                }else{
          //Binding the parameters
                   $result->execute($param);
                   $resultat = $result->fetchAll();
                    return $resultat;
                }
                $result->closeCursor();
        }

そしてそれを適用するために、それは次のようになります

//First param, the SQL. Here we have named parameters, so we need them to get bind
$sql = 'SELECT * FROM articles WHERE publish = :number';
//Second param, the parameters that will get bind with the named ones
    $param = array(':number' => 1);

    $query = $mysql->selectAll($sql, $param);

    foreach ($query as $row) {
        extract($row);
        echo $title . '<br />';
    }

これがベストプラクティスと見なされているのか、安全であるのか、それとも正しいのかはわかりません。私が間違っている場合は、遠慮なく訂正してください。

于 2012-10-03T20:44:49.230 に答える