Mysqli kullanmadan PHP ve MySQL ile hazırlanan beyanı

3 Cevap php

Bu mysql kütüphane yerine mysqli kütüphanesini kullanarak PHP ve MySQL ile hazırlanmış bir açıklama oluşturmak için mümkün olup olmadığını bilmek istiyorum.

Ben PHP belgelerine şey bulamıyorum.

Teşekkürler.

3 Cevap

mysql uzantısı does not hazırlanmış deyimleri destekleyen (o sayfanın sonunda) PHP belgelerine quite clearly states. Alternatif mysqli that supports prepared statements would be PDO_MYSQL .

Neden Hazırlanan Açıklama kullanmak istiyor musunuz?

SQL enjeksiyonu sizin endişe ise her zaman kendi rulo olabilir:

$fname = "Robert'); DROP TABLE students;--";
$lname = "Smith";

$pureSql = "SELECT FROM `users` WHERE `fname` = '$fname'   AND `lname` = '$lname'";
$prepSql = "SELECT FROM `users` WHERE `fname` = :userfname AND `lname` = :userlname";

echo $pureSql, "\n";
echo prepare($prepSql, array('userfname' => $fname, 'userlname' => $lname)), "\n";

function prepare($sql, $params=array()){

    if(strlen($sql) < 2 || count($params) < 1){
        return $sql;
    }

    preg_match_all('/\:[a-zA-Z0-9]+/', $sql, $matches);

    $safeSql = $sql;
    foreach($matches[0] as $arg){
        if(array_key_exists(ltrim($arg, ':'), $params)){
            $safeSql = str_replace($arg, "'" . mysql_real_escape_string($params[ltrim($arg, ':')]) . "'", $safeSql);
        }
    }

    return $safeSql;

} //prepare()

Çıktı:

SELECT FROM users WHERE fname = 'Robert'); DROP TABLE students;--' AND lname = 'Smith' SELECT FROM users WHERE fname = 'Robert\'); DROP TABLE students;--' AND lname = 'Smith'

EDIT: Xkcd link http://xkcd.com/327/ unuttum