Подключение PHP к MS SQL Server

<!--?php
$serverName = "(local)"; //serverName
$connectionInfo = array( "Database"=-->"DabaseNew", "UID"=>"sa", "PWD"=>"*****");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn==true ) {
 echo "Connection established.";
}else{
 echo "Connection could not be established.";
 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."";
}
?>

Я пытаюсь подключиться к php к моему серверу sql, используя sqlsrv_connect. Приведенный выше код дает мне ошибку ниже;

Выход: установлено соединение. Массив ([0] => Массив ([0] => 42000 [SQLSTATE] => 42000 [1] => 102 [code] => 102 [2] => [Microsoft] [Собственный клиент SQL Server 11.0] [SQL Сервер] Некорректный синтаксис рядом с "УСЛУГАМИ". [Message] => [Microsoft] [Собственный клиент SQL Server 11.0] [SQL Server] Неверный синтаксис рядом с "УСЛУГАМИ".))

3 ответа

Вам нужно избежать символа $ с \$, так как php рассматривает его как первый символ ov переменной. Попробуй это:

$sql = "SELECT * FROM Dbo.[DATABASE COMPANY SERVICES\$Employee]";

РЕДАКТИРОВАТЬ:

Чтобы избежать escapingg вы можете также использовать одиночные кавычки ' вместо двойных кавычек ". Тогда PHP не разрешает переменные в строке. (См этот вопрос)

$sql = 'SELECT * FROM Dbo.[DATABASE COMPANY SERVICES$Employee]';

Второй EDIT:

Для объединения двух строк используйте . оператора:

$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).'\'';

Но вы НИКОГДА не должны напрямую отправлять параметр GET поверх своего SQL-сервера. Любой может проникнуть в вашу базу данных или даже удалить ее. Поэтому вам следует добавить функцию escape, подобную этой, или использовать другую db-библиотеку, такую как PDO, и строить параметризованные запросы. Мне было бы достаточно избежать одиночных кавычек внутри переменной с помощью другой такой цитаты:

function mssql_escape($str) {
 return str_replace("'", "''", $str);
}


Попробуйте переключиться

$sql = "SELECT * FROM Dbo.DATABASE COMPANY SERVICES$Employee";

с

$sql = 'SELECT * FROM Dbo.[DATABASE COMPANY SERVICES$Employee]';

Поскольку php считает, что $ Employee является переменной, если вы используете двойные кавычки. [] Используется, чтобы сообщить базе данных, что имя таблицы DATABASE COMPANY SERVICES$Employee противном случае пространство укажет на начало другой команды или переменной sql.

Старайтесь не использовать пробелы в именах таблиц btw, это позволяет избежать путаницы.


Если в tablename есть пробелы, вы должны выполнить запрос следующим образом: $ sql = "SELECT * FROM dbo. [DATABASE COMPANY SERVICES]"; Не уверен, что вы пытаетесь сделать с $ employee, потому что php видит его как переменную и пытается вставить его в него (я думаю, что здесь $ employee равен NULL).

licensed under cc by-sa 3.0 with attribution.