Php7 и mssql

lehaer

Новичок
переводил приложения с mysql на mssql, и что то пошло нет, помоги, прикладываю рабочий код на mysql

<?php

header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');

if(!isset($_POST)) die();

session_start();

$response = [];

$con = mysqli_connect('localhost', 'root', '', 'test_site');

$username = mysqli_real_escape_string($con, $_POST['username']);
$password = mysqli_real_escape_string($con, $_POST['password']);

$query = "SELECT * FROM `users` WHERE username='$username' AND password='$password'";

$result = mysqli_query($con, $query);

if(mysqli_num_rows($result) > 0) {
$response['status'] = 'loggedin';
$response['user'] = $username;
$response['id'] = md5(uniqid());
$_SESSION['id'] = $response['id'];
$_SESSION['user'] = $username;
} else {
$response['status'] = 'error';
}

echo json_encode($response);

и то что у меня получилось, но не работает, такую же таблицу создал, все срабатывает, вроде ошибок но по определенному username и password из базы данных не заходит

<?php

header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');

if(!isset($_POST)) die();

session_start();

$response = [];

$servername = 'localhost';
$options = [
'UID' => 'sa', // имя пользователя, имеющего доступ к БД
'PWD' => '1234', // пароль
'Database' => 'test_site'
];
$conn = sqlsrv_connect($servername, $options);


$username = sqlsrv_prepare($conn, $_POST['username']);
$password = sqlsrv_prepare($conn, $_POST['password']);

$sql = "SELECT * FROM [users] WHERE username='$username' AND password='$password'";

$result = sqlsrv_query($conn, $sql);

if(sqlsrv_num_rows($result) > 0) {
$response['status'] = 'loggedin';
$response['user'] = $username;
$response['id'] = md5(uniqid());
$_SESSION['id'] = $response['id'];
$_SESSION['user'] = $username;
} else {
$response['status'] = 'error';
}

echo json_encode($response);
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
И что-то пошло нет? Что пошло, как нет?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@lehaer, может все таки в мануал? Как минимум вижу, что про sqlsrv_prepare ты не читал

Я даже не спрашиваю зачем переводить с одной базы на другую этот крипт.
 

lehaer

Новичок
а что должно быть вместо sqlsrv_prepare ? просто нужно чтобы база данных была на mssql, а не mysql...
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@lehaer, открой ман, почитай, посмотри что ты передаешь в функцию, и что она все таки от тебя ждет. Не обязательно у тебя ошибка в этом месте, надо http://phpfaq.ru/debug тоже почитать
 

lehaer

Новичок
@c0dex, можете подсказать альтернативу mysqli_real_escape_string? благодаря мануалу отследил ошибки, подправил, так всё работает, но через альтернативу к "mysqli_real_escape_string" , что нагуглил, addslashes() не работает

Код:
$sql  = "SELECT * FROM [test_site].[dbo].[users] WHERE [username] like 'admin' AND [password] like 'admin'";

$params = array();
$options =  array( "Scrollable" => SQLSRV_CURSOR_KEYSET );

$stmt = sqlsrv_query( $conn, $sql , $params, $options );

$row_count = sqlsrv_num_rows($stmt);

if($row_count === 1){
    echo "Success";}
else{
    echo "Invalid username/password";}
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ты плохо и невнимательно читаешь ман. Там есть подготовленные выражения на вроде тех, что есть в PDO - sqlsrv_query отвечает как раз за такие вещи.

For statements that you plan to execute only once, use sqlsrv_query(). If you intend to re-execute a statement with different parameter values, use the combination of sqlsrv_prepare() and sqlsrv_execute().
 
Сверху