<?php
$serverName = "(local)"; //serverName
$connectionInfo = array( "Database"=>"DabaseNew", "UID"=>"sa", "PWD"=>"*****");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn==true ) {
echo "Connection established.<br />";
}else{
echo "Connection could not be established.<br />";
die( print_r( sqlsrv_errors(), true));
}
$sql = "SELECT * FROM Dbo.DATABASE COMPANY SERVICES$Employee";
$stmt = sqlsrv_query( $conn, $sql);
if(!$stmt){
die( print_r( sqlsrv_errors(), true));
}
$rows = sqlsrv_has_rows($stmt);
while($obj = sqlsrv_fetch_object( $stmt)){
echo $obj->Description.", ".$obj->lName."<br />";
}
?>
我正在尝试使用sqlsrv_connect将php连接到我的sql server。上面的代码在下面给出了一个错误;
输出: 连接已建立。 数组([0] =&gt;数组([0] =&gt; 42000 [SQLSTATE] =&gt; 42000 [1] =&gt; 102 [代码] =&gt; 102 [2] =&gt; [Microsoft] [SQL Server Native Client 11.0] [SQL Server]&#39; SERVICES&#39;附近的语法不正确。[message] =&gt; [Microsoft] [SQL Server Native Client 11.0] [SQL Server]&#39; SERVICES&#39附近的语法不正确;。))
答案 0 :(得分:1)
如果tablename中有空格,您应该像这样运行查询: $ sql =&#34; SELECT * FROM dbo。[数据库公司服务]&#34 ;; 不确定你要用$ employee做什么,因为php将它视为一个变量并尝试将其填充到那里(我认为这里$ employee为NULL)。
答案 1 :(得分:1)
尝试切换
$sql = "SELECT * FROM Dbo.DATABASE COMPANY SERVICES$Employee";
与
$sql = 'SELECT * FROM Dbo.[DATABASE COMPANY SERVICES$Employee]';
因为php认为如果你使用双引号,$ Employee是一个变量。 []用于告诉数据库表名是DATABASE COMPANY SERVICES$Employee
,否则空格将指示另一个sql命令或变量的开始。
尽量不要在表名中使用空格btw,这样可以避免混淆。
答案 2 :(得分:0)
您需要使用$
转义\$
字符,因为php会将其视为变量的第一个字符。试试这个:
$sql = "SELECT * FROM Dbo.[DATABASE COMPANY SERVICES\$Employee]";
编辑:
为避免转义,您还可以使用单引号'
而不是双引号"
。然后PHP不解析字符串中的变量。 (see this question)
$sql = 'SELECT * FROM Dbo.[DATABASE COMPANY SERVICES$Employee]';
第二次编辑:
要连接两个字符串,请使用.
运算符,如下所示:
$foo = "Hello ";
$bar = $foo."world!"; // gives "Hello world!"
正如您可以在第一个编辑"
中引用的答案内阅读双引号中的变量解析变量,而'
单引号则不会。你可能的解决方案可能是这样的:
$query = 'SELECT [First Name] AS firstName, [Last Name] AS lastName
FROM Dbo.[DATABASE COMPANY SERVICES$Employee]
WHERE [Employee Number] = 15 OR [E-Mail] = \''.mssql_escape($mail).'\'';
但是你永远不应该直接在你的sql server上发送一个GET参数。任何人都可以渗透你的数据库甚至删除它。因此,您应该添加一个类似this one的转义函数,或者考虑使用另一个像PDO这样的db-library并构建参数化查询。我可以用另一个单引号来转义变量中的单引号:
function mssql_escape($str) {
return str_replace("'", "''", $str);
}