gpt4 book ai didi

php - 尝试将登录名从 mysqli 转换为 sqlsrv

转载 作者:行者123 更新时间:2023-11-29 21:06:24 25 4
gpt4 key购买 nike

我目前正在尝试将使用 mysql 的 php 登录名(我知道这有点过时)转换为使用 sqlsrv。这只是一项学习任务,因为我想学习将站点从 mySQL 迁移到 MSSQL。

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
//Start session
session_start();

//Array to store validation errors
$errmsg_arr = array();

//Validation error flag
$errflag = false;

//Connect to mysql server
$serverName = "localhost";
$connectionInfo = array( "Database"=>"dbname", "UID"=>"sa", "PWD"=>"123");
$conn = sqlsrv_connect( $serverName, $connectionInfo );
if( $conn === false ) {
die( print_r( sqlsrv_errors(), true));
}

//Function to sanitize values received from the form. Prevents SQL injection
function clean($str) {
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return $str;
}

//Sanitize the POST values
$login = clean($_POST['username']);
$password = clean($_POST['password']);

//Input Validations
if($login == '') {
$errmsg_arr[] = 'Login ID missing';
$errflag = true;
}
if($password == '') {
$errmsg_arr[] = 'Password missing';
$errflag = true;
}

//If there are input validations, redirect back to the login form
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location: index.php");
exit();
}

//Create query
$qry="SELECT * FROM users WHERE Username='$login' AND Password='".md5($_POST['password'])."'";
$stmt = sqlsrv_query( $conn, $qry );

//Check whether the query was successful or not
if($stmt) {
$row_count = sqlsrv_num_rows( $stmt );
if($row_count == 1) {
//Login Successful
session_regenerate_id();
$member = sqlsrv_fetch_assoc($stmt);
$_SESSION['SESS_MEMBER_ID'] = $member['idUsers'];
$_SESSION['SESS_FIRST_NAME'] = $member['FirstName'];
$_SESSION['SESS_LAST_NAME'] = $member['LastName'];
session_write_close();
header("location: home.php");
exit();
}else {
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
echo $row['FirstName'];
$row_count = sqlsrv_num_rows( $stmt );
echo $row_count;
echo $stmt;
}
//Login failed
//header("location: index.php");
exit();
}
}else {
die("Query failed");
}
}
?>
<!DOCTYPE html>
<html>

<head>

<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">

<title>Asset Manager</title>

<link rel="stylesheet" href="assets/main.css">
<link rel="stylesheet" href="assets/login.css">

</head>


<header>
<img src="img/logo.png">
</header>

<ul>

</ul>


<div class="main-content">

<form class="form-login" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">

<div class="form-log-in-with-email">

<div class="form-white-background">

<div class="form-title-row">
<h1>Log in</h1>
</div>

<div class="form-row">
<label>
<span>Username</span>
<input type="text" name="username" id="username">
</label>
</div>

<div class="form-row">
<label>
<span>Password</span>
<input type="password" name="password" id="password">
</label>
</div>

<div class="form-row">
<button type="submit" name="Submit" value="Login">Log in</button>
</div>

</div>

</div>

</form>

</div>

</body>

</html>

问题是它一直持续到最后一个。正如您在代码中看到的那样,我一直在进行一些故障排除。我认为问题是行计数不起作用。当我回显行数时,我只显示资源 5。

有什么想法吗?

最佳答案

解决办法是改变

if($stmt) {
$row_count = sqlsrv_num_rows( $stmt );
if($row_count == 1) {

至:

if($stmt) {
$rows = sqlsrv_has_rows( $stmt );
if($rows === true) {

关于php - 尝试将登录名从 mysqli 转换为 sqlsrv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36792477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com