一开始以为是代码的问题,后来试过在本机上运行正常,在服务器上运行就先执行了else里面的插入数据库语句,再执行的查询语句,服务器是Apache 2.4 ,PHP 5.6 ,mysql 8.0 ,都重装试过了,依然是先执行else里面的插入数据库语句,再执行前面的查询语句,有没有知道是什么原因的呢
假设我现在清空数据库,然后运行代码输出如下
代码如下,
<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers:Token");
header("Content-type:text/html;charset=UTF-8");
require_once 'token_management.php';
$servername="127.0.0.1";
$username="root";
$password="********";
$dbname="htqq";
$userid=$_GET['user'];
$uesrpassword = $_GET['password'];
$type=$_REQUEST['type'];
// $userid='abc123456';
// $uesrpassword ='abc123456';
// $type='sign';
echo($type);
$conn=mysqli_connect($servername, $username, $password, $dbname);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$token_management = new token_management();
if ($type == "sign") {
$sql = "SELECT userid FROM user WHERE userid = '{$userid}'";
$result = $conn->query($sql);
if (mysqli_num_rows($result) == 1) {
echo('$result == 1');
$res = array(
'verify' => 'exists',
);
echo json_encode($res, JSON_UNESCAPED_UNICODE);
return 1;
} else {
echo('$result != 1');
$sql1 = "INSERT INTO user (userid,password) VALUES ('{$userid}','{$uesrpassword}')";
$result1 = $conn->query($sql1);
$token = $token_management->get_token($userid);
$res = array(
'verify' => 'ok',
'token' => $token
);
echo json_encode($res, JSON_UNESCAPED_UNICODE);
return 0;
}
}
if ($type == "login") {
$sql = "SELECT password FROM user WHERE userid = '{$userid}'";
$result = $conn->query($sql);
if (mysqli_num_rows($result) == 0) {
$res = array(
'verify' => 'noexists',
);
echo json_encode($res, JSON_UNESCAPED_UNICODE);
} else {
$sql1 = "SELECT password FROM user WHERE password = '{$uesrpassword}'";
$result1 = $conn->query($sql1);
$row = $result1->fetch_assoc();
// print_r($row['password']);
$token = $token_management->get_token($userid);
if ($uesrpassword == $row['password']) {
$res = array(
'verify' => 'ok',
'token' => $token
);
} else {
$res = array(
'verify' => 'noexists'
);
};
echo json_encode($res, JSON_UNESCAPED_UNICODE);
}
}
你在if外面打个断点,然后运行程序就明白了
if else 会走哪个,肯定是根据条件判定;
打印if里面的判断条件,肯定就知道为什么了。
在本机条件是ture,在服务器条件是false,是完全有可能的,打印出来才能知道
可能是SQL语句执行出错了,因此“ if (mysqli_num_rows($result) == 1) { ” 这个地方的判断条不为真了。在本地SQL 可执行,在服务器上不能执行,有可能是服务器上数据库的连接可能有问题。做如下处理试一下:
1、服务器上代码PHP开启所有报错提示,看一下会不会有什么报错;
2、服务器上检测一下PHP与MySQL连接是否正常;
3、输出一下要执行的SQL语句,然后到MySQL 命令行下执行一下,看一下是否可以正常执行;
4、在if语句前一行打印输出一下判断条件的结果是什么;等等
一步一步查,从服务器运行环境--->到数据库连接--->再到PHP代码--->再运代码的运行处理逻辑,这些过程中对应的报错提示都打开,运行日志都查一下,总能查出问题来。
我感觉是你自己搞了个乌龙,插入语句肯定是不存在的情况下才插入,你清空的时候是否搞错了数据库?你自己看下你再哪个环节上搞了个乌龙吧
查询语句的问题
1.mysqli_num_rows() 这个函数返回的是多条数据,但是你只是简单的那查出的数据和1做判断,结果肯定是false所以才会走到else
2.可以通过count()函数获取查询出的数据的数量,然后判断是否是大于0,如果小于0则走else