在 PHP 中的 MS SQL 查询中转义 $ 字符
Escape $ character inside a MS SQL query in PHP
我有一种情况,我必须在 MS SQL 查询中使用 $(美元符号),因为 table 是这样命名的(例如 [我的公司名称$Fixed Asset].[描述]), 但PHP识别部分"$Fixed" 作为一个变量,然后当我尝试在浏览器中执行代码时它会抛出一个错误,例如“注意:未定义变量:固定”。
如何转义这个字符?
这是我尝试使用的代码部分:
<?php
if (isset($_POST['submit'])) {
if ($_POST['password'] === 'mypass') {
$result = mssql_query("SET ANSI_NULLS ON;");
$result1 = mssql_query("SET ANSI_WARNINGS ON;");
$query = mssql_query("
TRUNCATE TABLE [fixed_assets].[dbo].[fa_masterdata];
INSERT INTO [fixed_assets].[dbo].[fa_masterdata]
SELECT
[My company name$Fixed Asset].[No]
,[My company name$Fixed Asset].[Description]
,[Search Description]
,[Description 2]
,[Location Code]
,[Vendor No_]
,[My company name$FA Depreciation Book].[Disposal Date]
,[My company name$FA Location].[Name]
,[My company name$Comment Line].Code
,[My company name$Comment Line].Comment
FROM [SQL SERVER NAME\INSTANCE].[MY COMPANY].[dbo].[My company name$Fixed Asset]
full outer join [SQL SERVER NAME\INSTANCE].[MY COMPANY].[dbo].[My company name$FA Location]
on [My company name$Fixed Asset].[FA Location Code] = [My company name$FA Location].[Code]
full outer join [SQL SERVER NAME\INSTANCE].[MY COMPANY].[dbo].[Record Link]
on [My company name$Fixed Asset].[No_] = convert(varchar(100),SUBSTRING([Record Link].[Record ID],8,8))
full outer join [SQL SERVER NAME\INSTANCE].[MY COMPANY].[dbo].[My company name$Comment Line]
on [My company name$Comment Line].[No_] = [My company name$Fixed Asset].[No_]
full outer join [SQL SERVER NAME\INSTANCE].[MY COMPANY].[dbo].[My company name$FA Depreciation Book]
on [My company name$FA Depreciation Book].[Fa No_] = [My company name$Fixed Asset].[No_]
where [My company name$Fixed Asset].[No_] != null");
echo "<br/><br/><div class='alert alert-success col-sm-offset-5 col-sm-2'><span>Fixed assets data imported from NAV successfully!!</span></div>";
} else {
echo "<br/><br/><span>Import failed! (wrong password entered?)";
}
}
?>
请指教。任何建议都非常受欢迎。
谢谢大家
您可以对 $
进行转义,这样它就不会被 PHP 读取为变量。
echo "$test";
演示:https://eval.in/605867 Vs. https://eval.in/605866(这是空的,因为 $test
不存在)
...
或者因为您的查询不使用单引号,所以只使用单引号来封装字符串。
echo '$test';
我有一种情况,我必须在 MS SQL 查询中使用 $(美元符号),因为 table 是这样命名的(例如 [我的公司名称$Fixed Asset].[描述]), 但PHP识别部分"$Fixed" 作为一个变量,然后当我尝试在浏览器中执行代码时它会抛出一个错误,例如“注意:未定义变量:固定”。
如何转义这个字符?
这是我尝试使用的代码部分:
<?php
if (isset($_POST['submit'])) {
if ($_POST['password'] === 'mypass') {
$result = mssql_query("SET ANSI_NULLS ON;");
$result1 = mssql_query("SET ANSI_WARNINGS ON;");
$query = mssql_query("
TRUNCATE TABLE [fixed_assets].[dbo].[fa_masterdata];
INSERT INTO [fixed_assets].[dbo].[fa_masterdata]
SELECT
[My company name$Fixed Asset].[No]
,[My company name$Fixed Asset].[Description]
,[Search Description]
,[Description 2]
,[Location Code]
,[Vendor No_]
,[My company name$FA Depreciation Book].[Disposal Date]
,[My company name$FA Location].[Name]
,[My company name$Comment Line].Code
,[My company name$Comment Line].Comment
FROM [SQL SERVER NAME\INSTANCE].[MY COMPANY].[dbo].[My company name$Fixed Asset]
full outer join [SQL SERVER NAME\INSTANCE].[MY COMPANY].[dbo].[My company name$FA Location]
on [My company name$Fixed Asset].[FA Location Code] = [My company name$FA Location].[Code]
full outer join [SQL SERVER NAME\INSTANCE].[MY COMPANY].[dbo].[Record Link]
on [My company name$Fixed Asset].[No_] = convert(varchar(100),SUBSTRING([Record Link].[Record ID],8,8))
full outer join [SQL SERVER NAME\INSTANCE].[MY COMPANY].[dbo].[My company name$Comment Line]
on [My company name$Comment Line].[No_] = [My company name$Fixed Asset].[No_]
full outer join [SQL SERVER NAME\INSTANCE].[MY COMPANY].[dbo].[My company name$FA Depreciation Book]
on [My company name$FA Depreciation Book].[Fa No_] = [My company name$Fixed Asset].[No_]
where [My company name$Fixed Asset].[No_] != null");
echo "<br/><br/><div class='alert alert-success col-sm-offset-5 col-sm-2'><span>Fixed assets data imported from NAV successfully!!</span></div>";
} else {
echo "<br/><br/><span>Import failed! (wrong password entered?)";
}
}
?>
请指教。任何建议都非常受欢迎。
谢谢大家
您可以对 $
进行转义,这样它就不会被 PHP 读取为变量。
echo "$test";
演示:https://eval.in/605867 Vs. https://eval.in/605866(这是空的,因为 $test
不存在)
...
或者因为您的查询不使用单引号,所以只使用单引号来封装字符串。
echo '$test';