Как и обещал, представляю вам простейший класс для работы с базой данных Мускул.
Ядром класса являются 2 функции, написанные Дмитрием Котеровым (http://dklab.ru), позволяющие использовать т.н. placeholders. Пример и использования и сам класс чуть ниже:
<?php
// +----------------------------------------------------------------------+
// | dMysql class |
// +----------------------------------------------------------------------+
// | Copyright (c) 2007 Darmen 'Darx' Amanbayev |
// +----------------------------------------------------------------------+
// | Простейший класс для работы с базой данных MySQL. |
// | Использованы функции mysql_qw() и mysql_make_qw() Д.Котерова |
// +----------------------------------------------------------------------+
// | Authors: Darmen Amanbayev <amanbayev@darmen.kz> |
// | Dmitry Koterov http://www.dklab.ru |
// +----------------------------------------------------------------------+
class dMysql{
private $cId; // id соединения
private $qResult; // Результат запроса
private $query; // Запрос
private $numrows; // Количество рядов
static $instances = 0; // КОличество экземплров класса
function __construct($host='localhost', $login='', $pass='', $db){
if(self::$instances!=0){
die('Закройте существующий экземпляр');
exit;
}else{
$this->cId = mysql_connect($host, $login, $pass) or die(mysql_error(), mysql_errno());
mysql_select_db($db);
self::$instances = 1;
}
}
// Соединились или нет?
private function isConnected(){
return self::$instances;
}
// Выполнение запроса
public function query(){
if (!$this->isConnected()){
die('Нет подключения.');
}else{
// Получаем все аргументы функции.
$args = func_get_args();
// Если первый параметр имеет тип "ресурс", то это ID соединения.
$conn = null;
if (is_resource($args[0])) $conn = array_shift($args);
// Формируем запрос по шаблону.
$query = call_user_func_array(array(&$this,"mysql_make_qw"), $args);
// Вызываем SQL-функцию.
$conn!==null? $this->qResult = mysql_query($query, $conn) : $this->qResult = mysql_query($query);
$this->numrows = mysql_num_rows($this->qResult);
return $this->qResult;
}
}
//
private function mysql_make_qw() {
$args = func_get_args();
// Получаем в $tmpl ССЫЛКУ на шаблон запроса.
$tmpl =& $args[0];
$tmpl = str_replace("%", "%%", $tmpl);
$tmpl = str_replace("?", "%s", $tmpl);
// После этого $args[0] также окажется измененным.
// Теперь экранируем все аргументы, кроме первого.
foreach ($args as $i=>$v) {
if (!$i) continue; // это шаблон
if (is_int($v)) continue; // целые числа не нужно экранировать
if (get_magic_quotes_gpc()){
$args[$i] = "'".$v."'";
}else{
$args[$i] = "'".mysql_escape_string($v)."'";
}
}
// На всякий случай запорняем 20 последних аргументов недопустимыми
// значениями, чтобы в случае, если число "?" превышает количество
// параметров, выдавалась ошибка SQL-запроса (поможет при отладке).
for ($i=$c=count($args)-1; $i<$c+20; $i++){
$args[$i+1] = "UNKNOWN_PLACEHOLDER_$i";
}
// Формируем SQL-запрос.
$this->query = call_user_func_array("sprintf", $args);
return $this->query;
}
public function fetchRow(){
return mysql_fetch_row($this->qResult);
}
public function getQResult(){
return $this->qResult;
}
public function getQuery(){
return $this->query;
}
public function getNumRows(){
return $this->numrows;
}
}
?>
<?php
$db = new dMysql('localhost', $login, $pass);
$res = $db->query('SELECT * FROM `users` WHERE `sex_per_week` > ? AND `partner_sex` = ?', 7, 'female');
?>