так что я не уверен, что здесь не так, я попытался сделать это несколькими способами, и я не могу заставить его работать, я следовал инструкции, но она, кажется, не меняется, у меня есть простой login.php, Я уже проверил свой запрос, но он работает на MySQL, у меня есть отчеты об ошибках, но я подозреваю, что это может быть потому, что я тестирую это на WAMP-сервере, но я не уверен, если это что-то сделать, пожалуйста, помогите.
РЕДАКТИРОВАНИЕ
<?php
session_start();
ERROR_REPORTING( E_ALL | E_STRICT );
ini_set('display_errors',1);error_reporting(-1);
include_once 'UniversalConnect.php';
class login{
public function __construct()
{
$this->dologin();
}
private function dologin()
{
$name = $_POST['name'];
$pass = $_POST['pass'];
$mysqli = new mysqli("127.0.0.1","root","root","mrt");
var_dump($mysqli);
$sql="SELECT * FROM administradores WHERE nombre_administrador= ? AND password= ?";
$stmt = $mysqli->prepare($sql);
if ( !$stmt ) {
printf('errno: %d, error: %s', $mysqli->errno, $mysqli->error);
die;
}
$stmt->bind_param("ss",$name,$pass);
if ( !$name ) {
printf('errno: %d, error: %s', $stmt->errno, $stmt->error);
}
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows==1)
{
var_dump($rows);
header("location: indexSCAF.html");
else{
$errmsg_arr[] = 'Username and Password are not found';
$errflag = true;
}
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
exit();
}
}
}/*close function dologin*/
}/*close class */
?>
результаты var_dumps дают
string 'admin' (length=5)
string 'test' (length=4)
object(mysqli)[3]
public 'affected_rows' => null
public 'client_info' => null
public 'client_version' => null
public 'connect_errno' => null
public 'connect_error' => null
public 'errno' => null
public 'error' => null
public 'error_list' => null
public 'field_count' => null
public 'host_info' => null
public 'info' => null
public 'insert_id' => null
public 'server_info' => null
public 'server_version' => null
public 'stat' => null
public 'sqlstate' => null
public 'protocol_version' => null
public 'thread_id' => null
public 'warning_count' => null
object(mysqli_stmt)[4]
public 'affected_rows' => null
public 'insert_id' => null
public 'num_rows' => null
public 'param_count' => null
public 'field_count' => null
public 'errno' => null
public 'error' => null
public 'error_list' => null
public 'sqlstate' => null
public 'id' => null
object(mysqli_stmt)[4]
public 'affected_rows' => null
public 'insert_id' => null
public 'num_rows' => null
public 'param_count' => null
public 'field_count' => null
public 'errno' => null
public 'error' => null
public 'error_list' => null
public 'sqlstate' => null
public 'id' => null
null
Вам нужно использовать bind_result перед извлечением результата, чтобы ваш оператор prepare выбирался правильно.
$mysqli = new mysqli("127.0.0.1","root","root","mrt");
$sql = " SELECT userId,userName From user WHERE nombre_administrador= ? AND password= ? ";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ss",$user,$pass);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows>0)
{
$stmt->bind_result($userId,$userName)
while($stmt->fetch())
{
// success handle result
header("location: indexSACF.html");
}
}
else
{
$errmsg_arr[] = 'Username and Password are not found';
$errflag = true;
}
$stmt->free_result()
$stmt->close();
Замечания: В запросе никогда не используйте select *, так как это не будет связывать ваши результаты. вместо этого используйте arameters
SELECT userId,userName From user WHERE nombre_administrador= ? AND password= ? ;
Для получения дополнительной информации вы можете обратиться этот
Других решений пока нет …