Различные вопросы по PHP и MySQL

243K
.
Koenig, там идёт синхронизация маркеров и переданных аргументов.
Если для маркера передан массив, то там идёт автоматическая подстановка нужного кол-ва маркеров.
--
Я х.з, если найду класс, то скину.
.
(\/)____o_O____(\/)
L!MP, будет не лишним подглядеть, спасибо
.
(\/)____o_O____(\/)
Kazzone-1x-net, перевести?
.
Simba
Кадило крутится, лавэха мутится
Kazzone-1x-net (04.09.2012/09:51)
Кто можеть мне перевести бд?
База данных - по русски
Database - английский вариант. Гг
.
(\/)____o_O____(\/)
Kazzone-1x-net, перенести тогда уже, через 3ч пиши в почту
.
Koenig, вобщем, старого кода я не нашел, пришлось писать новый.
М.б что-то, где-то криво ибо реально 20мин. посидел.

class DB
{
	protected static $connection;
	protected static $config = [
		// ...
	];
	
	/*  */
	
	static function conf($key, $value = null)
	{
		if (is_null($value) && is_array($key)) {
			static::$config = array_merge(static::$config, $key);
		} else {
			static::$config[ $key ] = $value;
		}
	}
	
	/*  */
	
	static function connection()
	{
        if (is_null(static::$connection)) {
			$config = static::$config;
			
			try {
				static::$connection = new \PDO($config['dsn'], $config['user'], $config['password'], [
					\PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
					\PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
					\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'",
				]);
			} catch (\PDOException $e) {
                throw new \Exception('Не удалось установить соединение с базой данных.');
            }
		}
		
		return static::$connection;
	}
	
	/*  */
	
	static function query($query, array $parameters = [])
	{
		$return = false;
		
		if (count($parameters) == 0) {
			$return = static::connection()->query($query);
		} else {
			if ($statement = static::connection()->prepare(static::parseQuery($query, $parameters))) {
				if ($statement->execute(static::parametersFlatten($parameters))) {
					$return = $statement;
				}
			}
		}
		
		return $return;
	}
	
	/*  */
	
	static function __callStatic($method, $parameters)
	{
		return call_user_func_array(array(static::connection(), $method), $parameters);
	}
	
	/*  */
	
	protected static function parseQuery($query, $parameters)
	{
		$querySegments = explode('?', $query);
		$query = $querySegments[0];
		
		$i = 1;
		
		foreach ($parameters  as $parameter) {
			if (is_array($parameter)) {
				$query .= rtrim(str_repeat('?,', count($parameter)), ',');
				$query .= $querySegments[ $i ];
			} else {
				$query .= '?';
				$query .= $querySegments[ $i ];
			}
			
			++$i;
		}
		
		return $query;
	}
	
	/*  */
	
	protected static function parametersFlatten(array $parameters)
	{
		$i = 0;
		
		while ($i < count($parameters)) {
			if (is_array($parameters[ $i ])) {
				array_splice($parameters, $i, 1, $parameters[ $i ]);
			} else {
				++$i;
			}
		}
		
		return $parameters;
	}

}


Использование.

DB::conf([
	'dsn'  => 'mysql:host=127.0.0.5; dbname=brandmob',
	'user' => 'mysql',
	'password' => 'mysql',
]);

// или так
// DB::conf('dsn', 'mysql:host=127.0.0.5; dbname=test');
// DB::conf('user', 'mysql');
// DB::conf('password', 'mysql');

$users = DB::query('SELECT * FROM tbl_users WHERE id IN(?) AND ip = ?', [[1, 4, 7], 2130706437])->fetchAll();

// так можно получить непосредственный доступ к инстасу PDO

DB::connection()->lastInsertId();

// или, можно сразу обращаться к методам PDO через хук (__callStatic)

DB::exec('DELETE FROM tbl_users WHERE id = 2');
.
Скажите, можно ли install с джона переделать под другой сайт? А то я пока не в состоянии написать свой)
.
DaRkWe1L, возможно конечно.... но можно ли надо у автора спросить...
.
Вот смотрите у меня есть таблица `coment`
`id` int auto_increment NOT NULL,
`name` vaschar(32) NOT NULL,
`msg` mediumtext NOT NULL,
PRIMARY KEY (`id`)
как мне вывести из этой таблици, постраничной навигацией сообщение? Ну что бы было типо от Николая и ниже сообщение?
.
Light in Night
LubovNIK,
$sql = mysql_query("select `name`, `msg` from `coment`");
while($post = mysql_fetch_assoc($sql))
{
    echo '<div>Автор: '.$post['name'].'</div>
    <div>Коммент: '.$post['msg'].'</div>';
}

Проверки и фильтрации уже добавишь сам
Всего: 7969