Полезные функции на PHP

Статус
Закрыто для дальнейших ответов.

trueW3C

Поклонник Yii
Регистрация
04.03.2009
Сообщения
847
В php 5 ввели такую полезную функцию, как __autoload. Чтобы каждый раз не подключать файл класса, мы 1 раз пишем функцию
Код:
function __autoload( $class_name )
{
  require_once 'classes/' . $class_name . '.class.php';
}
Вводится правило, что все классы хранятся в папке classes и имеют имя *.class.php.
Теперь можно забыть про подключение классов, можем просто писать
Код:
$tpl = new templates();
$core = new core();
$db = new mysql();
$exp = new exp();
Остальное сделаем функция( подключит 4 файла в папке classes: templates.class.php, core.class.php, mysql.class.php, exp.class.php)

Определение IP пользователя:
Код:
function getip(
{
    if ( getenv('REMOTE_ADDR') && strcasecmp( getenv('REMOTE_ADDR'), 'unknown') )
        return getenv("REMOTE_ADDR");
    elseif ( !empty($_SERVER['REMOTE_ADDR']) && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown'))
        return $_SERVER['REMOTE_ADDR'];
    else
        return "unknown";
}
Определение браузера пользователя
Код:
function getagent()
{
    if ( getenv('HTTP_USER_AGENT') && strcasecmp( getenv('HTTP_USER_AGENT'), 'unknown') )
        return text_filter( getenv('HTTP_USER_AGENT' ));
    elseif ( !empty($_SERVER['HTTP_USER_AGENT']) && strcasecmp($_SERVER['HTTP_USER_AGENT'], 'unknown') )
        return text_filter( $_SERVER['HTTP_USER_AGENT'] );
    else
        return 'unknown';
}
Случайная строка( принимает длину нужной строки. Если задан второй аргумент, то длинна строки будет выбрана случайно в промежутке $length..$interval  )
Код:
function randtext( $length, $interval = false ) 
{
    $salt = "abchefghjkmnpqrstuvwxyz0123456789";
    $hash = '';
        
    srand( ( double ) microtime() * 1000000 );
    
    if( $interval and $interval > $length )
        $length = rand( $length, $interval );
                
    for($i = 0; $i < $length; $i ++)
        $hash .= $salt[rand( 0, 33 )];
        
    return $hash;
}
Преобразование размера файла в байтах в "человеческие" величины. Принимает размер в байтах
Код:
function files_size( $size )
{
    $name = array('Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
    $mysize = $size ? round( $size / pow(1024, ( $i = floor( log( $size, 1024 ) ) ) ), 2) .' ' .$name[$i] : $size.' Bytes';
    return $mysize;
}
Отправка сообщений на email
$info - указываем true, чтобы в письмо добавилась информация о IP и браузере пользователя
$pr -  приоритет письма 1..5
Код:
function mail_send($email, $smail, $subject, $message, $info = '', $pr = '')
{
    $email = text_filter( $email );
    $smail = text_filter( $smail );
    $subject = text_filter( $subject );
    $pr = ( !$pr ) ? 3 : intval( $pr );
     if( $info ) $message = $message . ' ' . _IP . ': '. getip() . ' ' . _BROWSER . ': ' . getagent();
    $mheader = 'MIME-Version: 1.0\n'
    .'Content-Type: text/html; charset=' . _CHARSET . '\n'
    .'Content-Transfer-Encoding: 8bit\n'
    .'Reply-To: "' . $smail .'" <' . $smail .'>\n'
    .'From: "' . $smail .'" <' . $smail .'>\n'
    .'Return-Path: <' . $smail .'>\n'
    .'X-Priority: ' . $pr .'\n'
    .'X-Mailer: CMS Mailer\n';
    return mail( $email, $subject, $message, $mheader );
}
Функция создание мини-изображений
$imgfile - путь к исходному изображению
$imgthumb - имя для нового файла
$newwidth - ширина нового файла( как правило уменьшают по ширине)

Код:
function create_img_gd( $imgfile, $imgthumb, $newwidth )
{
    if (function_exists('imagecreate'))
    {
        $imginfo = getimagesize( $imgfile );
        
        switch( $imginfo[2] ) {
            case 1:
                $type = IMG_GIF;
                break;
            case 2:
                $type = IMG_JPG;
                break;
            case 3:
                $type = IMG_PNG;
                break;
            case 4:
                $type = IMG_WBMP;
                break;
            default:
                return $imgfile;
        }
        
        switch( $type ) {
            case IMG_GIF:
                if (!function_exists("imagecreatefromgif")) return $imgfile;
                    $srcImage = imagecreatefromgif( $imgfile );
                break;
            case IMG_JPG:
                if (!function_exists("imagecreatefromjpeg")) return $imgfile;
                    $srcImage = imagecreatefromjpeg( $imgfile );
                break;
            case IMG_PNG:
                if(!function_exists("imagecreatefrompng")) return $imgfile;
                    $srcImage = imagecreatefrompng( $imgfile );
                break;
            case IMG_WBMP:
                if (!function_exists("imagecreatefromwbmp")) return $imgfile;
                    $srcImage = imagecreatefromwbmp( $imgfile );
                break;
            default:
                return $imgfile;
        }
        
        if ( $srcImage )
        {
            $srcWidth = $imginfo[0];
            $srcHeight = $imginfo[1];
            $ratioWidth = $srcWidth / $newwidth;
            $destWidth = $newwidth;
            $destHeight = $srcHeight / $ratioWidth;
            $destImage = imagecreatetruecolor( $destWidth, $destHeight );
            
            imagealphablending($destImage, true);
            imagealphablending($srcImage, false);
            imagecopyresized($destImage, $srcImage, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight);
            
            switch( $type )
            {
                case IMG_GIF:
                    imagegif( $destImage, $imgthumb);
                    break;
                case IMG_JPG:
                    imagejpeg( $destImage, $imgthumb);
                    break;
                case IMG_PNG:
                    imagepng( $destImage, $imgthumb);
                    break;
                case IMG_WBMP:
                    imagewbmp( $destImage, $imgthumb);
                    break;
            }
            
            imagedestroy($srcImage);
            imagedestroy($destImage);
            return $imgthumb;
        } else {
            return $imgfile;
        }
    } else {
        return $imgfile;
    }
}
Транслит строки
$lower - преобразовать в нижний реестр
$punkt - оставлять точки

Код:
function totranslit($var, $lower = true, $punkt = true)
{
    $NpjLettersFrom = "абвгдезиклмнопрстуфцыі";
    $NpjLettersTo = "abvgdeziklmnoprstufcyi";
    $NpjBiLetters = array (
        "й" => "j", 
        "ё" => "yo",
        "ж" => "zh",
        "х" => "x", 
        "ч" => "ch",
        "ш" => "sh",
        "щ" => "shh",
        "э" => "ye", 
        "ю" => "yu", 
        "я" => "ya",
        "ъ" => "", 
        "ь" => "", 
        "ї" => "yi",
        "є" => "ye"
    );
    
    $NpjCaps = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЫЭЮЯЇЄІ';
    $NpjSmall = 'абвгдеёжзийклмнопрстуфхцчшщьъыэюяїєі';
    
    $var = str_replace( '.php', '', $var );
    $var = trim( strip_tags( $var ) );
    $var = preg_replace( '/\s+/ms', '-', $var );
    $var = strtr( $var, $NpjCaps, $NpjSmall );
    $var = strtr( $var, $NpjLettersFrom, $NpjLettersTo );
    $var = strtr( $var, $NpjBiLetters );
    
    if ( $punkt ) $var = preg_replace( '/[^a-z0-9\_\-.]+/mi', '', $var );
    else $var = preg_replace( '/[^a-z0-9\_\-]+/mi', '', $var );

    $var = preg_replace( '#[\-]+#i', '-', $var );

    if ( $lower ) $var = strtolower( $var );
    
    if( strlen( $var ) > 50 )
    {
        $var = substr( $var, 0, 50 );
        if( ($temp_max = strrpos( $var, '-' )) ) $var = substr( $var, 0, $temp_max );
    }
    
    return $var;
}
Человеческая установка куков... 
$expires - срок жизни кука в днях
Код:
function set_cookie($name, $value, $expires)
{
    if( $expires )
        $expires = time() + ( $expires * 86400 );
    else
        $expires = FALSE;
    
    setcookie( $name, $value, $expires);
}
 

trueW3C

Поклонник Yii
Регистрация
04.03.2009
Сообщения
847
Класс для работы с MySQL я его использую.

Код:
<?php
class mysql
{
	private $mysql_error = '';
	private $mysql_version = '';
	private $mysql_error_num = 0;
	private $show_error = true;

	public $query_num = 0;
	public $connect = false;
	public $result = false;
	public $time_taken = 0;

	public function __construct( $show_error = true )
	{
		$this->show_error = $show_error;

		if(!$this->connect = @mysql_connect( DB_HOST, DB_USER, DB_PASS ))
		{
			if( $show_error )
				$this->display_error(mysql_error(), mysql_errno());
			else
				return false;
		} 

		if(!@mysql_select_db(DB_NAME, $this->connect))
		{
			if( $show_error )
				$this->display_error(mysql_error(), mysql_errno());
			else
				return false;
		}

		$this->mysql_version = mysql_get_server_info();

		if(!defined('COLLATE'))
			define ('COLLATE', 'cp1251');

		if (version_compare($this->mysql_version, '4.1', ">=")) 
			mysql_query('/*!40101 SET NAMES \'' . COLLATE . '\' */');

		return true;
	}

	public function __destruct()
	{
		@mysql_close($this->connect);
	}

	public function query( $query, $once = false )
	{
		$time_before = $this->get_real_time();
		
		if(!($this->result = mysql_query( $query, $this->connect ) ) && $this->show_error)
		{
			$this->mysql_error = mysql_error();
			$this->mysql_error_num = mysql_errno();
			
			$this->display_error($this->mysql_error, $this->mysql_error_num, $query);
		}

		$this->query_num ++;
		$this->time_taken += $this->get_real_time() - $time_before;
		
		if( $once )
			return mysql_fetch_assoc( $this->result );
		
		return $this->result;
	}

	public function get_row()
	{
		return mysql_fetch_assoc( $this->result );
	}

	public function get_array()
	{		
		return mysql_fetch_array( $this->result );
	}

	public function num_rows()
	{		
		return mysql_num_rows( $this->result );
	}

	public function free()
	{		
		return mysql_free_result( $this->result );
	}

	public function safe( $source )
	{
		return mysql_real_escape_string($source);
	}

	private function get_real_time()
	{
		list($seconds, $microSeconds) = explode(' ', microtime());
		return ((float)$seconds + (float)$microSeconds);
	}

	private function display_error($error, $error_num, $query = '')
	{
		if($query)
		{
			$query = preg_replace("/([0-9a-f]){32}/", "********************************", $query);
			$query_str = "$query";
		}

		die('
		<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
		<html xmlns="http://www.w3.org/1999/xhtml">
		<head>
		<title>MySQL Fatal Error</title>
		<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
		<style type="text/css">
		<!--
		body {
			font-family: Verdana, Arial, Helvetica, sans-serif;
			font-size: 10px;
			font-style: normal;
			color: #000000;
		}
		-->
		</style>
		</head>
		<body>
			<font size="4">MySQL Error!</font> 
			<br />------------------------<br />
			<br />
			
			<u>The Error returned was:</u> 
			<br />
				<strong>'.$error.'</strong>

			<br /><br />
			</strong><u>Error Number:</u> 
			<br />
				<strong>' . $error_num . '</strong>
			<br />
				<br />
			
			<textarea name="" rows="10" cols="52" wrap="virtual">' . $query_str . '</textarea><br />

		</body>
		</html>');
	}
}
?>
Использование, по примеру будет все ясно
Код:
define( 'DB_HOST', 'localhost' );
define( 'DB_USER', 'root' );
define( 'DB_PASS', '' );
define( 'DB_NAME', 'db' );

$db = new mysql(); // $db = new mysql(false); если не нужно выводить ошибки

$text = $db->safe( $_POST['text'] ); // Короткая запись mysql_real_escape_string

$db->query('SELECT * FROM my_table WHERE text = \'' . $text . '\' ');
while( $row = $db->get_row() ) // или get_array()
{
	...
}

$row = $db->query('SELECT count(id) FROM my_table', true); // Запрос возвращает один ряд
echo $row['count(id)'];

$db->free(); //Если запрос был "большой", желательно освободить ресурсы после использования

echo 'Запросов сделано: ' . $db->query_num;
echo 'Запросы выполены за: ' . $db->time_taken . 'c';
 

Вложения

toxin

Well-Known Member
Регистрация
20.10.2009
Сообщения
478
ага в нужный момент, пока пойдеть, забрал

большое спасибо




С уважением toxin....
 

trueW3C

Поклонник Yii
Регистрация
04.03.2009
Сообщения
847
В 2 раза сокращает размер кода, относящийся к базе)
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
А ТЕПЕРЬ КРИТИКА:
MYSQL класс - почитайте про mysqli и не изобретайте велосипед :) а так же про propel, doctrine, PDO и zend_db
Случайная строка - почитайте топик http://www.nulled.ws/showthread.php?t=37721
Определение IP пользователя - не работает если основной сервер стоит за кеширующей проксей
Код:
function getRealIpAddr()
{
  if (!empty($_SERVER['HTTP_CLIENT_IP']))
  {
    $ip=$_SERVER['HTTP_CLIENT_IP'];
  }
  elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
  {
    $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
  }
  else
  {
    $ip=$_SERVER['REMOTE_ADDR'];
  }
  return $ip;
}
__autoload - не единственная вкусность, и использовать ее в одиночку не очень хорошо. Читаем http://ru.php.net/manual/en/language.oop5.php
а по поводу вашего примера смотрим реализацию zend
Функция создание мини-изображений - я бы сделал:
Код:
exec("convert -geometry 250X250 file_old.jpg file_new.jpg");
 

toxin

Well-Known Member
Регистрация
20.10.2009
Сообщения
478
не изобретайте велосипед
Сколько раз я слышал подобное, но обьясните, почему тот же зенд не считается велосипедом ? неужели до зенда небыло ниодного фреймворка ?




С уважением toxin...
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
не изобретайте велосипед
Сколько раз я слышал подобное, но обьясните, почему тот же зенд не считается велосипедом ? неужели до зенда небыло ниодного фреймворка ?

С уважением toxin...
Я объясню: есть хорошии реализации и есть плохие, то что здесь - это отвратительная реализация, если бы вы знали все, что я перечислил, то согласились бы, mysqli вобще делает то же, что этот класс, остальные делают еще больше.
Тот же зенд не считается велосипедом потому-что он использует наработки(в т.ч. паттерны изобретенные многими людьми), которые были до него + комплексно использует. Можете сделать лучше? Я нет.
Если нужны примеры не жизнеспособности приведенного здесь класса:
1) у меня есть 2 проекта, где я работаю с двумя и более серверами, как здесь это делать?
2) в зависимости от скульной ошибки мне нужно передавать управление модулям, как это здесь сделать?
3) @mysql_close($this->connect); это вобще бред оставшийся с 4, т.к. в пятерка закрывает после последнего вызова.
4) http://ru.php.net/manual/en/book.mysqli.php ознакомьтесь с объектной частью

P.S. В классической реализации должна быть возможность получить из объекта mysql_link
 

Jason_Bourne

Member
Регистрация
17.06.2008
Сообщения
11
Определение IP пользователя - не работает если основной сервер стоит за кеширующей проксей
Код:
function getRealIpAddr()
{
 if (!empty($_SERVER['HTTP_CLIENT_IP']))
 {
 $ip=$_SERVER['HTTP_CLIENT_IP'];
 }
 elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
 {
 $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
 }
 else
 {
 $ip=$_SERVER['REMOTE_ADDR'];
 }
 return $ip;
}
Прокси может быть и анонимным.

А вообще, http://www.phpfaq.ru/ip .
 

toxin

Well-Known Member
Регистрация
20.10.2009
Сообщения
478
Medwoodu, я в чем то с тобой согласен, но давай возьмем последнюю версию зенда, и самую первую

естественно что последняя реализация, лучшая, в отношении защиты, выполнении кода, проетировании, в отношении всего, по сравнению с первой ! и это нормально ! это и понятно, так же пишут и все !
пишут велосипеды, но из 1000000 велосипедов выходит 1 хороший, в этом смысл ! понятно что не сразу, понятно нужно время !
Нужно пробовать, улутьшать, рекоструировать !и тогда возможно именно ты напишеш второй зенд !




это все пустые рассуждения, я согласен, я хотел только донести суть !
если ничего не делать, ничего и неполучится !

Если это класс Aurum'а возможно он не знал что есть лучшие реализации того или иного куска кода, ты показал, теперь ио знает, и сделает свой класс лучше !
Пусть это тупой, не работающий, убогий, и нивесть какой класс для работы с БД

Aurum не в обиду !
НО он имеет полное право на жизнь !
И тут уже ниче не поделаешь ! Зенд в своих первых реализациях возможно тоже звали велосипедом !



С уважением toxin...
 

trueW3C

Поклонник Yii
Регистрация
04.03.2009
Сообщения
847
 Если мне нужен сайт-визитка, зачем таскать огромный кирпич Zend за спиной?

Код:
exec("convert -geometry 250X250 file_old.jpg file_new.jpg");

Это вроде только для linux, и не многие простые хостинги разрешают exec

С каких пор небольшой функционал это плохо? Мне нужно подключится к БД, обработать результат и закрыть. А ещё нужна максимальная производительность. Тут нит ничего тормозящего работы скрипта.

@mysql_close($this->connect); это вобще бред оставшийся с 4
Что плохого, что сам скрипт чистить после себя? Я знаю, что после завершения работы скрипта соединение закроется.

И тут небольшая логика...минимальный zend это ~5 мб и это только файлы, реализующие его архитектуру + написанные программистом.

Но элементарный сайт новости, каталог , обратная связь полность со скриптами, шаблоном, бд редко весит более 1 мб. И что по вашему будет быстрей выполнятся?

Сейчас вы скажите, что zend для больших проектов и вы крутой програмер им пользуетесь. Но вспоминая историю... php создавался как серверный язык сценариев для не больших проектов.

Я руководствуюсь принципом чем короче, тем быстрей. А zend никаким образом не ускорят работу

1) у меня есть 2 проекта, где я работаю с двумя и более серверами, как здесь это делать?
Вы часто так с таким сталкиваетесь? Это единичный случай, для него пишется единичное решение.

Код:
public function __construct( $server, $user, $pass, $db )

$db1 = new mysql( ... );
$db2 = new mysql( ... );
toxin с каких пор простота это убогость?

getRealIpAddr() как не работает? Определяет IP неправильно или вообще не определяет?
 

toxin

Well-Known Member
Регистрация
20.10.2009
Сообщения
478
Набрел на странную статью в инете

http://articles.org.ru/cn/showdetail.php?cid=6790

Не нужно забивать гвозди пасатижами — «Мне надо реализовать гостевую книгу — возьму-ка я свой любимый набор библиотек на 6 мегабайт»
это еще раз доказывает 

И тут небольшая логика...минимальный zend это ~5 мб и это только файлы, реализующие его архитектуру + написанные программистом.

Но элементарный сайт новости, каталог , обратная связь полность со скриптами, шаблоном, бд редко весит более 1 мб. И что по вашему будет быстрей выполнятся?
Если не делать велосипед, то по сути, и делать то нечего !




С уважением toxin...
 

Jason_Bourne

Member
Регистрация
17.06.2008
Сообщения
11
Мои функции может тоже кому помогут.

Когда Register_globals = off, для получения параметров запроса приходится писать иногда громоздкие конструкции.
Эта функция призвана облегчить работу.

Код:
function get_param($name,$default = null,$type="string")
{
	$var = isset($_GET[$name]) ? $_GET[$name] : $default;
	$var = isset($_POST[$name]) ? $_POST[$name] : $var;
	if($type == "string" || $type == "") return $var;
	if($type == "int") return intval($var);
	if($type == "float") return floatval($var);
	return $var;
}
В функцию включено также преобразование типа, если нужно, например, полученное значение вставить в базу данных.
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
Мои функции может тоже кому помогут.
http://www.php.net/manual/en/function.filter-input-array.php
http://www.php.net/manual/en/function.filter-input.php
Надеюсь я вас не очень разочаровал?
по поводу проксей:
Оказывается, на свете существуют криворукие хостеры, у которых на сервере нет REMOTE_ADDR
МАСТЕРХОСТ -кто бы сомневался в их криворукости. А может это писавший статью малость того, чересчур уверен в себе?

Aurum, convert это пакет imagemagick, очень мощный. есть встроенные в пых библиотеки, правда плохо задокументированные(nix ,win, mac).

С каких пор небольшой функционал это плохо? Мне нужно подключится к БД, обработать результат и закрыть. А ещё нужна максимальная производительность. Тут нит ничего тормозящего работы скрипта.
так ё-мое, что вы к зенду то прицепились? я написал про квадратные колеса, вам нужна скорость и быстродействия и ваш функционал? так используйте mysqli он дает все это плюс кучу еще возможностей.

ИНТЕРНЕТ ЗАПОЛНЕН ГОВНОКОДОМ НА 90% ЗАЧЕМ ЕГО ЕЩЕ ПЛОДИТЬ ТО????

http://articles.org.ru/cn/showdetail.php?cid=6790 12
неплохая статья, хоть и немного сумбурная

P.S. Прежде чем писать для людей - изучите, что люди написали уже для вас !!!
 

toxin

Well-Known Member
Регистрация
20.10.2009
Сообщения
478
ИНТЕРНЕТ ЗАПОЛНЕН ГОВНОКОДОМ НА 90% ЗАЧЕМ ЕГО ЕЩЕ ПЛОДИТЬ ТО????
Возможно, но пока, идеал кода я не видел ! В том же зенде 100% есть погрешности ! иначе он бы обновлял дистрибьютив только от выходя к выходу нового интерпритатора php.

Ты уверен что пишешь не говно код ? Даже если пользуешься зендом, или еще чем то !

ИМХО, моя реализация, какая бы она не была, она для меня проще лучше и удоюней, чем реализация написанная кем то в тем же или большим функционалом !




С уважением toxin...
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
Возможно, но пока, идеал кода я не видел ! В том же зенде 100% есть погрешности ! иначе он бы обновлял дистрибьютив только от выходя к выходу нового интерпритатора php.
А вы смотрели? Или вы смотрите на номерки версий и багтреки и фапаете на свой мега крутой код типа echo "hello word"? Так вот, если вы не можете указать, где тот же зенд(не знаю почему вы так к нему прицепились, мой любимый фреймворк symfony) может сделать лучше или создать код лучше того же зенда то тогда, прошу прощения, вы звездобол и троль, которому хочется просто поговорить :)

За сим прекращаю дискуссию, т.к. все что хотел я сказал и все ссылки дал.

P.S.Знаете, в начале я написал длинную телегу по поводу того что вы меня не слышите..., я говорю другое ..., но потом решил ответить только это, прошу прощения что грубо.
 

toxin

Well-Known Member
Регистрация
20.10.2009
Сообщения
478
я не сказал что мой код крутой, я сказал что в любом случае он меня устраивает

я не слежу за зендом, не интересует

По сути что такое фреймворк ? Каркас для сайт, я не говорю что он гавно ! Я говорю что вокруг этого каркаса Вы можете написать гавно !

Я не разу не видел идеалов кода, что бы ктото не сказал что это "говнокод", покажите с чем вы сравниваете ! Где идеалы ? сказать тупо смотрите зенд смешно....

К зенду я не придераюсь, просто чуь что, все говорят, а вот зенд ..., а вот в нем так ...., смысл писать если есть ! смысл в том что бы моск не отрафировался !

Хотя сами понимаете =) вам это не грозит, Зенд, симфони, мне по барабану !




С уважением toxin... 
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
К зенду я не придераюсь, просто чуь что, все говорят, а вот зенд ..., а вот в нем так ...., смысл писать если есть !

С уважением toxin... 
Избирательное видиние :) , я все время призываю не писать, так как я, я призываю читать доки и изучать. И еще раз скажу, я не понимаю почему вы докопались до зенда и не докапывались до mysqli или пропела?
 

toxin

Well-Known Member
Регистрация
20.10.2009
Сообщения
478
А ответ просто, mysqli и пропел, я не юзал, а о том чего я незнаю я не говорю !




С уважением toxin...
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
А ответ просто, mysqli и пропел, я не юзал, а о том чего я незнаю я не говорю !
И очень зря, я выше на mysqli доку ссылку кидал, проштудируйте, по-любому знание еще одной библиотеки php не помешает :)
http://phpclub.ru/detail/article/mysqli вот еще одно базовое использование, но там есть и плейсхолдеры, и получение массива результатов, и множественные запросы. Я думаю нет возражений, что родная библиотека php написанная на C лучше и быстрее чем класс прослойка на php?
 
Статус
Закрыто для дальнейших ответов.
Верх Низ