Существует диапазон 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_*
теперь устарели.
Я выполнял сложные хранимые процедуры, используя 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 – это путь вперед по следующим основным причинам:
mysql_real_escape_string()
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 поддерживает транзакции, лучше для обработки ошибок
Надеюсь, ответ очевиден!