MySQL не сохраняет в моей базе данных - PullRequest
0 голосов
/ 23 марта 2011

Мне нужна помощь в моем PHP-коде под управлением MySQL.

Для моей хранимой процедуры в MySQL у меня есть следующее:

create procedure register ( out userid              int
                           ,in username             varchar(30)
                           ,in unencryptedpassword  varchar(100)
                           ,in description          varchar(100)
                           ,in emailaddress         varchar(100) )
begin
  declare salt char(25);
  declare createdById int;
  declare createdDate datetime;
  declare lastUpdatedById int;
  declare lastUpdatedDate datetime;
  set salt = 'abcdefghijklmnopqrstuvwxy';
  set createdById = -1;
  set createdDate = now();
  set lastUpdatedById = -1;
  set lastUpdatedDate = now();
  insert into Users ( userId
                    , userName
                    , encryptedPassword
                    , description
                    , emailAddress
                    , createdById
                    , createdDate
                    , lastUpdatedById
                    , lastUpdatedDate ) 
             values ( null
                    , username
                    , password(concat(username, salt, unencryptedpassword))
                    , description
                    , emailAddress
                    , createdById
                    , createdDate
                    , lastUpdatedById
                    , lastUpdatedDate );
  set userid = last_insert_id();
  commit;
end;
/

Для моей страницы register.php у меня есть следующее:

<?php
$host="localhost";
$db="mydb";
$uname="myuser";
$pword="mypass";

$firstname=$_POST["firstname"];
$lastname=$_POST["lastname"];
$emailaddress=$_POST["emailaddress"];
$newpassword=$_POST["newpassword"];

$mysqli = new mysqli( $host, $uname, $pword, $db );
$res = $mysqli->multi_query( "call register(@userid,$emailaddress,$newpassword,$firstname,$emailaddress)" );
$mysqli->close();

$_SESSION["sessionId"] = 1;
?>

Проблема в том, что он никогда не вставляется в мою базу данных. Может ли кто-нибудь помочь мне с этим.

Спасибо.

1 Ответ

1 голос
/ 23 марта 2011

По какой причине вы используете multi_query? Вы выполняете только один запрос 'call'. Он полон уязвимостей SQL-инъекций, так как вы не избегаете ни одного из этих четырех значений, которые вы извлекаете из массива _POST.

mysql_multi_query возвращает логическое значение FALSE, если первый запрос в вызове не выполнен. Вы должны проверить $res для этого:

$res = $mysqli->multi_query(...);
if ($res === FALSE) {
   die("Mysql error: " . $mysqli->error);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...