有一系列的mssql_*不在折旧过程中。
它们的工作方式与mysql_*函数相同;它们需要我手动转义,请找到以下手册的链接:
http://uk1.php.net/manual/en/book.mssql.php
MSSQL_*函数是php5-mssql的一部分,但现在已被移动到php5-sybase中。
此外,使用PDO构建数据库也是可用的,但是否是实验性的 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扩展或MSSQL_*函数即使没有折旧..。如果是,为什么?
发布于 2013-01-30 17:30:44
我自己的观点
我已经使用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_*函数,如果您决定以任何特定的原因更改数据库,则必须重写所有内容。更不用说,考虑到MySQL函数现在已经不再推荐使用PDO了,所以您必须对mysql_*使用PDO。
我的PDO测试
我一直在数据库中运行复杂的存储过程,包括INPUT PARAMETERS、OUTPUT PARAMETERS、INOUT PARAMETERS,数据库中都有100,000,000+记录。这些都是完美无瑕的工作,并继续这样做!
参考文献
不使用mssql_*函数的另一个原因是,PHP5.3或更高版本的Windows不再支持它们:
看这里
SyBase扩展属于与mssql_*函数相同的类别。它们是程序性的,不切实际的,一点也不便于携带!
功能
乍一看,我注意到这些扩展中没有一个具有与mysql_real_escape_string()函数相同的函数。然而,在PDO中,没有必要这样做。
结论
不用说,我是一个道义上的PDO支持者(这是在使用它一年之后才出现的!)这并不是说我不会听取其他人对mssql_*功能的意见,我只是很难说服我,我认为大多数人认为这些功能甚至可以与PDO竞争。
因此,最后,我认为,PDO是前进的方向,主要原因如下:
mysql_real_escape_string()这样的功能。mysql_*数据库对旧的被弃用的函数进行基准测试之后,事实证明它在许多情况下(如果不是所有情况下)都更快。不久前,我问了一个类似的问题,得出了同样的结论:
发布于 2013-01-13 01:44:51
这可能会引发一场好的辩论。我想测试PDO函数对Microsoft服务器的稳定性的唯一方法是设置您自己的本地测试区域,并将PDO类推向它的能力。
如前所述,php5-sybase包含MSSQL函数,不处于弃用过程中。
我想这取决于开发人员对什么感到满意。
如果您对MSSQL_*函数很满意,那么继续使用它们,但是在不久的将来,它们可能会完全被MySQL函数所反对-- MySQL函数也会出现这种情况。
虽然,如果您正在寻找更改和新的挑战,通过SQL注入增加安全性,那么继续尝试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..
?>发布于 2017-02-14 06:54:39
PDO绝对是最好的选择,对于linux用户,我强烈建议使用sybase连接器和dblib DSN。
对于使用PHP7的ubuntu用户,应该是:
sudo apt-get install php-sybase freetds-common libsybdb5以及连接:
$db = new PDO("dblib: host=$hostname:$port; dbname=$dbname", $dbuser, $dbpassword);你应该可以走了。
https://stackoverflow.com/questions/14299813
复制相似问题