I have this function in my database class. It accepts 3 parameters:
- Sorgu
- hangi çalıştırmak için sunucu config saklanır adıyla tanımlanır
- sql sorgu içine alıntı argümanları bir dizi
örnek çağrı:
$toplist = MyDbClass->q('SELECT * FROM movies WHERE score > ?','slaveserver1',array(100));
Burada kod geliyor ...
/*
* @param the sql query. may be pure sql or having ? as placeholders for variables that are passed in the 3rd param, not enquoted
* @param name of the link (slave or master server or other arbitrary database)
* @param optional array of vars that will be filled in where the ? signs in the query are
*/
public function q($sql,$name,$vars=false) {
// lets see if the link to the server with name $name has already been initialised, if not lets do it
if(!isset($this->links[$name])) {
$this->initialize($name);
}
// if variables have been passed, lets fill them into the query
if($vars !== false) {
// first real scape them all according to the correct link
for($i=0;$i<count($vars);$i++) {
$vars[$i] = mysql_real_escape_string($vars[$i],$this->links[$name]);
}
// now escape all actual % signs so they are not used as placeholders vor vsprintf
$sql = str_replace('%','%%', $sql);
// no add '' quotes arround every placeholder and fill in
$sql = str_replace('?','\'%\'', $sql);
$sql = vsprintf($sql,$args);
}
// now execute the parsed query on the correct server
return mysql_query($sql,$this->links[$name]) or die(mysql_error($this->links[$name]));
}
Şimdi benim sorular şunlardır:
benim kod ile herhangi bir sorun var mı? espacially:
- Sorguda argümanlar etrafında
''
tırnak koyarak değil çalışma yapabilirsiniz herhangi bir durumlar var mı? - (ben zaten giriş sorguda qutoes koyarsanız ...) benim sorguları
where score > ''100 ''
gibi çift tırnaklı malzeme ile biten benim işlevi önlemek için bazı zarif yolu yoktur. - Eğer fonksiyonun ne düşünüyor? Bunu yapmanın iyi bir yolu?