PDO для подключения к MSSQL Over MSSQL_ * Функции

Существует диапазон mssql_* которые не относятся к процессу амортизации.

Они работают так же, как и функции mysql_* ; им нужно вручную сбежать, пожалуйста, найдите ссылку на руководство ниже:

http://uk1.php.net/manual/en/book.mssql.php

MSSQL_ * Функции были отделены от php5-mssql но теперь были перемещены в php5-sybase

Кроме того, использование PDO для вашей базы данных Construct доступно, но является экспериментальным http://php.net/manual/en/ref.pdo-dblib.php

Но мой общий вопрос: из-за того, что PDO / MySQLI подталкивается в качестве основного решения для связи с базой данных, я должен прекратить использовать функции mssql_*

Или это возможно для:

Соединение PDO:

 $dsn = 'mssql:host=localhost;dbname=testdb'; $user = 'dbuser'; $password = 'dbpass'; try { $dbh = new PDO($dsn, $user, $password); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } 

Но если этот процесс по-прежнему отображается как экспериментальный, должны ли разработчики использовать Microsoft SQL Server для своих баз данных, дождитесь, пока это расширение будет стабильным для серверов MSSQL

Поэтому в конце дня PDO Extension или MSSQL_ * Функции, даже если они не обесцениваются. Если да, то почему?

    Мое собственное мнение

    Я использую PDO для подключения к базе данных MSSQL уже более года, и до сих пор я не нашел абсолютно никаких проблем.

    Фактически, я изучил использование функций mssql_* перед миграцией в PDO и пришел к выводу, что они были гораздо менее надежным, не говоря уже о небезопасном способе подключения к базе данных MSSQL .

    Логически

    С логической точки зрения, PDO также является лучшим вариантом, так как для перехода от MSSQL к MySQL требуется всего несколько настроек.

    Я написал класс оболочки для класса PDO, который упрощает подключение к этим базам данных.

    Рассмотрим это как пример:

     <?php // +------------------------------------------------------------------------+ // | class.mssql.php | // +------------------------------------------------------------------------+ // | Copyright (c) Company Ltd 2013. All rights reserved. | // | Version 1.0 | // | Last modified 30/01/2013 | // | Email email@company.co.uk | // | Web http://www.company.co.uk | // +------------------------------------------------------------------------+ // Make sure the SQL class is included require_once("class.sql.php"); /* * Class mssql * * @version 1.0 * @author Ben Carey <email@company.co.uk> * @copyright Company Ltd * */ class mssql extends sql{ /** * Initialize the object and set/reset all variables * * This function is called when the object is constructed * * @access private */ function __construct(&$memcache){ // Call the sql construct parent::__construct($memcache); // Global MsSQL defaults $this->query_escaper_left = "["; $this->query_escaper_right = "]"; $this->connection_engine = "sqlsrv"; $this->connection_parameter_host = "server"; $this->connection_parameter_database = "Database"; $this->select_db_function = "db_name()"; } } ?> 

    Все, что уникально для MSSQL , определено в этом расширении, а затем передано родительскому классу class.sql.php . Красота PDO заключается в том, что код в файле class.sql.php не должен каким-либо образом изменяться для работы с любой базой данных (или всеми базами данных, которые я пробовал до сих пор).

    Таким образом, все, что здесь необходимо, – это небольшое расширение для каждого типа базы данных, и оно будет работать.

    Принимая во внимание, что с помощью собственных функций mssql_* , если вы решили изменить базу данных по какой-либо конкретной причине, вам придется переписать все. Не говоря уже о том, что вам придется использовать PDO для MySQL в любом случае, учитывая, что функции mysql_* теперь устарели.

    Мое тестирование с PDO

    Я выполнял сложные хранимые процедуры, используя INPUT PARAMETERS OUTPUT PARAMETERS , INOUT PARAMETERS , в базах данных с 100 000 000+ записей в них. Они работали абсолютно безупречно и продолжают это делать!

    Рекомендации

    Другая причина не использовать функции mssql_* заключается в том, что они больше не поддерживаются в Windows с PHP версии 5.3 или новее:

    Глянь сюда

    Расширение SyBase относится к той же категории, что и функции mssql_* . Они процедурные, непрактичные и не переносные вообще!

    функциональность

    С первого взгляда я заметил, что ни одно из этих расширений не имеет функции, эквивалентной функции mysql_real_escape_string() . Принимая во внимание, что в PDO нет необходимости в этом

    Вывод

    Само собой разумеется, что я моральный сторонник PDO (и это произошло только после его использования в течение 1 года!). Это не значит, что я не буду слушать мнения других людей о mssql_* , мне будет очень сложно убедить меня, и я думаю, что большинство людей, что эти функции могут даже конкурировать с PDO.

    Итак, в заключение, на мой взгляд, PDO – это путь вперед по следующим основным причинам:

    1. Он очень портативен, легко переключается на разные базы данных с минимальным кодом
    2. Он безопасен без необходимости таких функций, как mysql_real_escape_string()
    3. Он быстро становится нормой для разработчиков
    4. Если у вас нет опыта работы с объектно-ориентированным программированием, то это отличное введение
    5. Он поставляется с предустановленным большинством пакетов PHP
    6. Он может легко выполнять запросы комков, включая хранимые процедуры
    7. После сопоставления базы данных MySQL с устаревшими mysql_* она оказалась быстрее во многих случаях, если не во всех случаях.Смотрите здесь

    Я задал подобный вопрос некоторое время назад, и был сделан тот же вывод:

    Глянь сюда

    Это может вызвать хорошие дебаты. Я полагаю, что единственный способ проверить стабильность функций PDO для Microsoft SQL Servers – это настроить собственную локальную зону тестирования и подтолкнуть PDO Class к ее возможностям.

    Как вы сказали, php5-sybase содержит функции MSSQL и не находится в процессе устаревания.

    Я думаю, это зависит от того, что разработчик чувствует себя комфортно.

    Если вы довольны функциями MSSQL_ *, то продолжайте использовать их, но в ближайшем будущем они могут перестать быть устаревшими из PHP – это происходит с функциями MySQL.

    Хотя, если вы ищете изменения и новые проблемы, с добавленной безопасностью от SQL Injection, тогда продолжайте и проверьте совместимость PDO с серверами MSSQL.

    Это полностью зависит от вас.

    По моим предпочтениям и угадываю предпочтение многих других разработчиков, я бы сказал, что вы ищите функции PDO. Я предполагаю, что это будет работать нормально.

     <?php $dsn = 'mssql:host=localhost;dbname=testdb'; $user = 'dbuser'; $password = 'dbpass'; try { $dbh = new PDO($dsn, $user, $password); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } $Query = $dbh->prepare("SELECT * FROM Tbl WHERE `ID` = :id"); $Query ->bindParam(':id', $ID, PDO::PARAM_INT); $Query->execute(); // etc.. ?> 

    PDO – это, безусловно, путь, и для пользователей Linux я настоятельно рекомендую использовать соединитель sybase и DSL dblib.

    Для пользователей ubuntu с PHP7 это будет:

     sudo apt-get install php-sybase freetds-common libsybdb5 

    И для подключения:

     $db = new PDO("dblib: host=$hostname:$port; dbname=$dbname", $dbuser, $dbpassword); 

    И тебе должно быть хорошо.

    PDO – это очевидный выбор с учетом безопасности. PDO-код переносимый – его можно настроить для отправки информации в несколько баз данных без необходимости изменять вызовы функций и изменять только несколько параметров.

    Класс MSSQL не переносится так, как PDO переносится.

    PDO имеет отличную поддержку подготовленных операторов, а MSSQL – нет. PDO действует как слой абстракции, очень похожий на JDBC на Java и переносимый. PDO поддерживает транзакции, лучше для обработки ошибок

    Надеюсь, ответ очевиден!