我们正在将一些 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
谢谢任何提示
我有一个场景,其中 IFID和Code是InsertDate相同的,如果它是第一个条目,那么它将是 0,否则是 1。
演示数据:
CREATE TABLE #test
(
ID int,
code int,
InsertDate datetime2
)
Insert into #test values (1,1,'2019-09-17 03:19:00.0000000')
Insert into #test values (1,1,'2019-09-17 03:19:00.0000000')
Insert into #test values (1,1,'2019-09-17 03:19:00.0000000')
Insert into #test values (2,1,'2019-09-17 03:19:00.0000000')
Insert into #test values (3,1,'2019-09-17 03:19:00.0000000')
Run Code Online (Sandbox Code Playgroud)
预期产出
ID code InsertDate flag
-----------------------------------------
1 1 2019-09-17 03:19:00.0000000 0
1 1 2019-09-17 03:19:00.0000000 1
1 1 2019-09-17 03:19:00.0000000 1
2 1 2019-09-17 03:19:00.0000000 0
3 1 …Run Code Online (Sandbox Code Playgroud) 我的数据库中有一个简单的查询:
SELECT id, name FROM users FOR JSON AUTO, ROOT('users')
Run Code Online (Sandbox Code Playgroud)
这将返回以下JSON:
{
"users": [
{"id": "1", "name": "John"}
{"id": "2", "name": "Mike"}
]
}
Run Code Online (Sandbox Code Playgroud)
我想使用以下格式返回:
{
"users": {
"list": [
{"id": "1", "name": "John"}
{"id": "2", "name": "Mike"}
]
}
}
Run Code Online (Sandbox Code Playgroud)
我可以在SQL级别上通过简单地更改查询来做到这一点吗?
大家早上好,我写了一个非常简单的应用程序,我必须等待用户按下某个键(例如 F2)才能继续处理。按下按钮的等待周期工作正常,但我需要帮助的问题是:如果在按下按钮的等待周期中,我点击了另一个应用程序,我的应用程序失去了焦点,我无法再重新获得控制权。即使我点击应用程序的任何部分,表单的标题始终保持灰色,应用程序仍然在等待按键的压力,如果我按下所需的键,显然什么也没有发生。如何重新控制我的应用程序?我想我会在 while 循环中放置诸如 SetFocus、StayOnTop、SetForegroundWindow 等指令,以始终保持我的应用程序处于活动状态,但我无法组合任何东西...
var
Form2: TForm2;
mkey: word;
implementation
{$R *.dfm}
procedure TForm2.FormActivate(Sender: TObject);
begin
label1.Visible:= false;
mkey:= 0;
keyPreview:= true;
while mkey <> VK_F2 do begin
label1.Visible:= true;
label1.Caption:= datetimetostr(now); // for example
application.ProcessMessages;
end;
label1.Visible:= false;
end;
procedure TForm2.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
mkey:= key;
end;
end.
Run Code Online (Sandbox Code Playgroud) 我有一列由递增的整数组成(从 1 开始,增加到 N)。我想创建第二列,从 1, 2, 3, 4 运行,然后重置并从 1, 2, 3, ... 开始,依此类推。明确表明,这就是我想要的:
1 1
2 2
3 3
4 4
5 1
6 2
7 3
8 4
9 1
10 2
11 3
12 4
13 1
14 2
15 3
... ...
Run Code Online (Sandbox Code Playgroud)
你有关于如何在 SQL 中执行此操作的提示吗?最好有完整的代码示例?
为了减去 1 年,我使用
SELECT DATEADD(year, -1, GETDATE())
Run Code Online (Sandbox Code Playgroud)
当天也一样。
如果我想要组合,语法是什么?
来自30/05/2020--->29/05/2019
我不知道这是否是正确的问题,但我正在使用 MSSQL 和 PHP,并且刚刚安装了 PHP SqlSrv 的驱动程序。
(您需要添加 Microsoft 的扩展才能使用 MsSql,因为 PHP 不再支持 mssql_connect)
但是现在我不确定如何在 Visual Studio 代码中添加对该驱动程序的支持,它说我正在使用未定义的函数。
有什么方法可以将两者结合起来,还是我只需要满足于它的工作原理?
$serverName = "serverName\\sqlexpress"; //serverName\instanceName
$connectionInfo = array( "Database"=>"dbName", "UID"=>"userName", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
echo "Connection established.<br />";
}else{
echo "Connection could not be established.<br />";
die( print_r( sqlsrv_errors(), true));
}
?>
Run Code Online (Sandbox Code Playgroud)
我用:
Windows 10、PHP 7.2.1.1、Laragon、php_pdo_sqlsrv-5.8.1-7.2-ts-vc15-x64、php_sqlsrv-5.8.1-7.2-ts-vc15-x64。
QuoteName(i.ItemDescription,CHAR(34))当项目描述很长时,不会给出任何结果。有没有什么解决方案可以让我们保存长度超过128个字符的字符串并返回它?
我正在寻找帮助来创建 SQL 查询以从包含如下 json 对象的文本字段中提取电子邮件地址:
{"objectType":"Agent","mbox":"mailto:testuser@test.com","name":"Test User"}
Run Code Online (Sandbox Code Playgroud)
为了示例起见,我将调用 tabletblUsers和 field UserObject。
我可以得到 string 之后的所有内容"mailto:",但需要在 address 之后去除 string 的其余部分。显然,地址可能并不总是以“.com”结尾。