Я использую sqlsrv для подключения к базе данных MSSQL. Функция в защищенном (и доступном только для нескольких человек) приложении для интрасети предоставляет поле для написания кода T-SQL и выполнения их в базе данных. В данный момент я работаю над возможностью проверить данный запрос.
Сначала запрос проверяется на правильное намерение (например, если найдены INSERT, UPDATE, DELETE, SHOW, CREATE и т. Д., Запрос не будет выполнен). Если это удастся, я пытаюсь проверить запрос. Когда я предоставляю ошибочный запрос SQL, я все равно получаю ресурс в результате sqlsrv_query
вместо false
(как описано как ожидаемое поведение здесь: http://php.net/manual/en/function.sqlsrv-query.php). Примечание: запрос действительно ложный (смешное предложение ..), в SQL Server Management Studio запрос завершается неудачно, как и ожидалось.
Ниже моей функции testQuery(string $query)
:
public static function testQuery($query) {
sqlsrv_configure('WarningsReturnAsErrors', 1);
$statement = sqlsrv_query(self::$instance, $query);
if($statement === false) {
$errors = sqlsrv_errors(SQLSRV_ERR_ALL);
if(!is_null($errors)) {
return $errors;
}
return false;
}
return true;
}
Использование или отказ от sqlsrv_configure () не имеет значения. База данных, к которой я обращаюсь, — это база данных MSSQL 2005.
Предложения?
Я не уверен, что это было, может быть, задержка в соединении. Я ничего не изменил, но теперь он работает.
Других решений пока нет …