Доброго времени суток. Я сделал скрипт регистрации и всё вроде работает, запись в базе создаётся, но пароль получается не такой который должен быть. Вот сам запрос: Код (PHP): sqlsrv_query($conn, "INSERT INTO dbo.tbl_Account (IdName, Passwd, Security, SubSecurity ) VALUES ('$Username', (SELECT BINARY_CHECKSUM('$Password')), 0, 0 )"); в результате пароль 123456 получается таким 52496230 А вот если я создаю аккаунт через хранимую процедуру Код (PHP): USE [Account]GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[usp_CreateAccount] @i_AccountName nvarchar( 20 ), @i_AccountPass nvarchar( 12 ) --with encryption as begin set nocount on set lock_timeout 10000 declare @o_Count int declare @r_Return int exec @r_Return = usp_AccountInsert @i_AccountName, @i_AccountPass if ( @r_Return < 0 ) return -2 -- SUCC return 0 end Она передаёт логин и пароль в процедуру usp_AccountInsert USE [Account] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[usp_AccountInsert] @IdName nvarchar( 20 ), @Passwd nvarchar( 12 ) --with encryption as begin set nocount on set lock_timeout 10000 if exists( select IdName from tbl_Account where IdName = @IdName ) return -2 insert into tbl_Account ( IdName, Passwd, Security, SubSecurity ) values ( @IdName, checksum(@Passwd), 0, 0 ) if ( @@ROWCOUNT <> 1 ) return -3 return 0 end Получается пароль 2120620386 Что я делаю не так?
Когда ставлю checksum результат тоже не тот который должен быть хотя в хранимой процедуре стоит checksum. Почему результат не тот получается понять не могу.
Так зачем ты эти две функции используешь? Может ты так пытался хэш пароля в базу записать? Чтобы защитить пароли в базе почитай это https://php.net/manual/ru/function.password-verify.php Добавлено спустя 1 минуту 17 секунд: И что такое sql injection почитай.
Сервер авторизации использует именно контрольную сумму пароля, не я его писал и не могу изменить это. Я пытаюсь записать данные в базу напрямую через запрос. Хранимые процедуры я привёл для примера. Добавлено спустя 36 минут 37 секунд: Вот весь скрипт. Можно тут прикрутить хранимую процедуру что бы логин и пароль передавались в неё? Код (PHP): <?php $serverName = "Сервер"; $connectionInfo = array( "Database"=>"Account", "UID"=>"Логин", "PWD"=>"Пароль"); $conn = sqlsrv_connect( $serverName, $connectionInfo); if($conn) { }else{ echo "1.<br />"; die( print_r( sqlsrv_errors(), true)); } if($_POST['submit']) { $Username = stripslashes($_POST['username']); $Password = stripslashes($_POST['password']); $PasswordConfirm = stripslashes($_POST['confirmpassword']); mysql_real_escape_string($Username); mysql_real_escape_string($Password); mysql_real_escape_string($PasswordConfirm); if($PasswordConfirm !=$Password){ echo("2.");} if((!$Password) || (!$PasswordConfirm)){ echo("3.");} else{ sqlsrv_query($conn, "INSERT INTO dbo.tbl_Account (IdName, Passwd, Security, SubSecurity ) VALUES ('$Username', (SELECT password_hash('$Password')), 0, 0 )"); echo("4."); } } else { echo("5."); } ?>
Да можно, сперва слепи sql запрос который будет работать в mssql и проверь его, потом этот запрос просто пихай в функцию sqlsrv_query и дело в шляпе. Когда ты вручную выполняешь запрос в mssql, то через php ты должен использовать тот же sql запрос, вся разница только через что его выполнять, через консоль, через графическую оболочку mssql или через php. Добавлено спустя 2 минуты 54 секунды: https://php.net/manual/ru/function.mssql-bind.php
вот что у меня получилось сделать. declare @r_Return int exec @r_Return = usp_AccountInsert 123, 123456 123-логин 123456-пароль В базе пароль в нужно виде. Так как я не очень силен в пхп прошу помочь с созданием запроса
exec usp_AccountInsert 12344, 123456 такой запрос создаёт в базе запись в правильными параметрами. Но когда в пхп ставлю sqlsrv_query($conn, exec usp_AccountInsert '$Username', '$Password') ни чего не происходит
Вот ещё раз https://php.net/manual/ru/function.mssql-bind.php Там есть пример как всё сделать: Код (PHP): $stmt = mssql_init('usp_AccountInsert'); И так далее.
Видимо руки у меня не из того места, в базе запись не появляется вообще Код (PHP): <?php $serverName = "Сервер"; $connectionInfo = array( "Database"=>"Account", "UID"=>"Логин", "PWD"=>"Пароль"); $conn = sqlsrv_connect( $serverName, $connectionInfo); if($conn) { }else{ echo "1.<br />"; die( print_r( sqlsrv_errors(), true)); } if($_POST['submit']) { $Username = stripslashes($_POST['username']); $Password = stripslashes($_POST['password']); $PasswordConfirm = stripslashes($_POST['confirmpassword']); mysql_real_escape_string($Username); mysql_real_escape_string($Password); mysql_real_escape_string($PasswordConfirm); if($PasswordConfirm !=$Password){ echo("2.");} if((!$Password) || (!$PasswordConfirm)){ echo("3.");} // Create a new stored prodecure $stmt = mssql_init('usp_AccountInsert'); // Bind the field names mssql_bind($stmt, '@i_AccountName', '$Username', SQLVARCHAR, false, false, 20); mssql_bind($stmt, '@i_AccountPass', '$Password', SQLVARCHAR, false, false, 12); // Execute mssql_execute($stmt); // Free statement mssql_free_statement($stmt); ?> PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]