我有以下环境:
我想使用新的PHP 5.5.0版本,它可以很好地运行,但由于缺少当前的驱动程序,我无法连接到MSSQL服务器.
对于我之前的PHP 5.4.15版本,我使用了来自> here <的官方Microsoft驱动程序.
是否有可能从PHP 5.5.0连接?
我正在尝试从sql server数据库中获取一些数据并在json中打印,但是数据库中的某些数据位于UTF-8(阿拉伯语)中。我在网上搜索并尝试了许多解决方案,但是没有一个对我有效,任何帮助都将受到欢迎。这是我的代码:
<?php
$serverName = "127.0.0.1"; //serverName\instanceName
$connectionInfo = array( "Database"=>"filmnak_com_", "CharacterSet" => "UTF-8", "UID"=>"filmnak", "PWD"=>"G5j^wk44");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
$sql = "SELECT CAST(ID AS INT) AS ID, CAST(Film AS TEXT) AS Film ,CAST(Name AS TEXT) Name FROM dbo.Movies";
$result = sqlsrv_query( $conn, $sql);
if( $result === false ) {
die( print_r( sqlsrv_errors(), true));
}
// looping through all results
// products node
$response["Info"] = array();
while ($row = sqlsrv_fetch_array($result)) {
// temp user array
$Info = array();
$Info["ID"] …Run Code Online (Sandbox Code Playgroud) 我们正在将一些 PHP 5.3 内部 API 代码转换为 PHP 7.2。转换过程的一部分是从使用 mssql_* DB API 切换到使用 sqlsrv_* DB API。我们发现的一件事是,旧的 MSSQL_EXECUTE 语句会忽略存储过程中的任何 T-SQL Print 语句,但新的 SQLSRV_QUERY 语句不会。
例如,我有以下示例存储过程:
create procedure spTestPrintStmt
@var1 varchar(50),
@var2 varchar(50),
@var3 varchar(50),
@rtn1 varchar(50) out,
@rtn2 varchar(50) out
as
begin
print 'Starting spTestPrintStmt...';
print 'Vars: ' + @var1 + ',' + @var2 + ',' + @var3;
select @rtn1 = @var1, @rtn2 = @var2 + @var3;
print 'Returned: ' + @rtn1 + ',' + @rtn2;
return 0;
end;
go
Run Code Online (Sandbox Code Playgroud)
我使用以下 PHP …
我们必须升级系统以使用 PHP7.3(从 MSSQL 更改为 SQLSRV DB Driver 和带有 PDO 的 SQLSRV)
我的问题是,我不理解这种行为以及如何正确解决它。
当我从数据库查询一DateTime列时,我得到:
2019-03-26 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
当我尝试将相同的值存储到DateTime数据库的列中时,它不起作用。我的数据库接受这种格式,例如:
26-03-2019 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
因此,我们现有的数据库层无法正常工作。
我需要帮助来理解这种行为,以及如何告诉数据库使用相同的格式进行查询和插入/更新
我们使用的查询没有特殊的转换,简单的 SELECT / UPDATE / INSERT。
PHP 版本:PHP 7.3.3-1+ubuntu18.04.1+deb.sury.org+1 (cli)(构建时间:2019 年 3 月 7 日 20:31:49)(NTS)
版权所有 (c) 1997-2018 The PHP Group Zend Engine v3.3.3,版权所有 (c) 1998-2018 Zend Technologies 与 Zend OPcache v7.3.3-1+ubuntu18.04.1+deb.sury.org+1,版权所有 (c) 1999-2018,作者:Zend Technologies
SQL服务器:MSSQL服务器2014
谢谢任何提示
我在SQL Server 2012中有一个存储过程,它首先检查数据是否存在,如果存在,则将Output参数设置@Return为1并运行select查询,如果不存在,则设置@Return为0并返回不同的select查询.
在测试此存储过程以确保数据准确时,它是完美的并返回我期望的数据.问题在于PHP端在尝试读取它显示的输出参数??t_rrr时应该显示1或0.我相信问题可能在sqlsrv_query中的预定义常量中,但我似乎无法使其工作.这是我的代码:
PHP:
if(isset($_GET['accno'])) {
$search = $_GET['accno'];
$return = "";
$tsql_callSP = "EXEC Intranet.CustomerSearch @Search=?, @Return=?";
$params = array(
array($search, SQLSRV_PARAM_IN),
array($return, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR),SQLSRV_SQLTYPE_INT),
);
/* Execute the query. */
$stmt = sqlsrv_query( $conn, $tsql_callSP, $params);
if( $stmt === false )
{
echo "EXEC Intranet.CustomerSearch Failed\n";
die( print_r( sqlsrv_errors(), true));
}
while($res = sqlsrv_next_result($stmt))
{
// make sure all result sets are stepped through,
// since the output params may not …Run Code Online (Sandbox Code Playgroud) 我遇到运行缓慢的查询问题,有时执行时间超过30秒,因此我希望增加sqlsrv_query超时.
Fatal error: Maximum execution time of 30 seconds exceeded
Run Code Online (Sandbox Code Playgroud)
我的PHP语法有问题,例如:http://php.net/manual/en/function.sqlsrv-query.php对我来说没有意义.
目前我的连接/设置如下:
$testServer = 'IP\servername,PORT';
$testDetails = array('Database' => 'DBNAME', 'UID' => 'USERNAME', 'PWD' => 'Password');
$testConnect = sqlsrv_connect($testServer, $testDetails);
Run Code Online (Sandbox Code Playgroud)
我的理解是我需要通过作为参数传递timout细节,sqlsrv_connect但我没有得到正确的语法.
(我已经尽可能地优化了查询,不幸的是,考虑到db表的设计,我无法在不到30秒的时间内始终如一地返回.)
我对整个 PHP/MSSQL 编码非常陌生,需要 SQL 注入预防方面的帮助。
我正在向使用 MSSQL 数据库的网站添加一个简单的搜索功能。该代码按照我想要的方式工作,但它很容易受到 SQL 注入的攻击。
除了准备语句之外,还有其他方法可以确保其安全吗?
我对存储过程也不太熟悉。
我尝试过准备语句,但没有运气(除非我做错了什么,这很可能)
我不熟悉的存储过程。
<?PHP
$tech = (isset($_POST['Technician'])? $_POST['Technician'] : null);
$sql = "SELECT * FROM Errors WHERE Error LIKE '%$tech%' or Description LIKE '%$tech%'";
$name = trim($_POST['Technician']);
if(empty($name)){
print '<script type="text/javascript">alert("Please enter an Error Code or Error Description")</script>';
exit;
}
$stmt = sqlsrv_query($conn, $sql);
if ($stmt) {
$rows = sqlsrv_has_rows( $stmt );
if ($rows === true) {
echo "";
} else{
echo '<script type="text/javascript">alert("Please enter a valid Term")</script>';
} …Run Code Online (Sandbox Code Playgroud) 我在 MSSQL 中有以下查询:
SELECT DataFeed.AccountTranID, DataFeed.Datetime as MyDT
FROM admin_all.DataFeed
where cast(DataFeed.Datetime as Date) = cast(getdate() as Date)
Run Code Online (Sandbox Code Playgroud)
这给出了以下输出:
AccountTranID MyDT
124552 2019-07-31 00:00:04.660
124553 2019-07-31 00:00:07.933
124554 2019-07-31 00:00:25.623
124555 2019-07-31 00:00:29.013
124556 2019-07-31 00:00:29.206
124557 2019-07-31 00:00:44.893
124558 2019-07-31 00:00:56.796
124559 2019-07-31 00:01:11.353
124560 2019-07-31 00:01:12.260
124561 2019-07-31 00:01:19.413
124562 2019-07-31 00:01:19.510
124563 2019-07-31 00:01:28.596
124564 2019-07-31 00:01:30.710
124565 2019-07-31 00:01:46.976
124566 2019-07-31 00:01:49.823
124567 2019-07-31 00:01:57.340
Run Code Online (Sandbox Code Playgroud)
尝试使用此 PHP 代码获取 MyDT 字段时,我无法获得输出(空白)。使用 AccountTranID,没问题。
这是 PHP 代码:
$tsql = …Run Code Online (Sandbox Code Playgroud) 当我尝试连接到 sqlserver 数据库时出现此错误:
Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -49 [code] => -49 [2] => This extension
requires the Microsoft ODBC Driver for SQL Server. Access the following URL to download the ODBC
Driver for SQL Server for x64: https://go.microsoft.com/fwlink/?LinkId=163712 [message] => This
extension requires the Microsoft ODBC Driver for SQL Server. Access the following URL to download the
ODBC Driver for SQL Server for x64: https://go.microsoft.com/fwlink/?LinkId=163712 ) )
Run Code Online (Sandbox Code Playgroud)
我的 Dockerfile 如下: …