Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQLi条件无法正常工作_Php_Mysql_Mysqli - Fatal编程技术网

Php MySQLi条件无法正常工作

Php MySQLi条件无法正常工作,php,mysql,mysqli,Php,Mysql,Mysqli,当用户尝试注册时,我正在检查第一个表设备,如果有任何可用的设备\u id,我想提供用户试用=0,如果没有任何设备\u id,我想在该表中插入设备\u id,并希望用户试用=1,但当前它总是设置试用=1,并在表设备中插入设备\u id。 我当前的代码如下所示 $serial = $POST["serial"]; $fcm = $POST["fcm"]; $trial = 0; $trial_sql = "SELECT FROM device WHERE device_id

当用户尝试注册时,我正在检查第一个表设备,如果有任何可用的设备\u id,我想提供用户试用=0,如果没有任何设备\u id,我想在该表中插入设备\u id,并希望用户试用=1,但当前它总是设置试用=1,并在表设备中插入设备\u id。 我当前的代码如下所示

$serial = $POST["serial"];
    $fcm = $POST["fcm"];
    $trial  = 0;
    $trial_sql = "SELECT FROM device WHERE device_id = $serial";
        $trial_result = mysqli_query($conn, $trial_sql);
        if (mysqli_num_rows($trial_result) == 0) {
         $device_sql = "INSERT INTO device(device_id) VALUES('$serial')";
         if($conn->query($device_sql)){
             $trial = 1;
            }   
    }
    $sql = "INSERT INTO user(name, email, password, device_id, trial, fcm) VALUES('$name', '$email', '$password', '$serial', $trial, '$fcm')";
    if($conn->query($sql)) {
        $response["code"] = 1;
    }
    return json_encode($response);
如果有人能纠正我的错误,请告诉我。 谢谢


您的第一个查询无效,因为它没有说明要从设备表中选择哪些列

双方都需要指定要选择的列,并在设备id周围加引号

$trial_sql = "SELECT * FROM device WHERE device_id = '$serial'";

如果使用预先准备好的语句,则引号不会成为问题。

您的代码容易受到攻击。您应该通过或使用带绑定参数的准备语句。有一些很好的例子。@AlexHowansky谢谢你的评论和建议。在我活着之前我会做的。让我知道,如果你能帮助我解决我的问题。感谢您还应该确保device_id字段在数据库架构中具有唯一的约束。如果device_id是字符串,则需要在select或use prepared中的值周围加引号statements@NigelRen你解决了我的问题。谢谢!这仍然是一个问题。您需要从中选择设备\u id。。。在第一个例子中,我已经有一段时间没有使用未准备好的语句了。我坚持准备、绑定参数、绑定结果和执行。它使我们很容易看到所有东西的去向和运作方式。是一个很好的开始扭转教学/传播草率和危险的编码实践的潮流的地方。如果你在没有准备好陈述的情况下发布了答案。另外。
SELECT columnA, columnB FROM device
$trial_sql = "SELECT * FROM device WHERE device_id = '$serial'";