Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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 什么是;无法识别的SQL语句;是指当我试图使用IF不存在时?_Php_Mysql - Fatal编程技术网

Php 什么是;无法识别的SQL语句;是指当我试图使用IF不存在时?

Php 什么是;无法识别的SQL语句;是指当我试图使用IF不存在时?,php,mysql,Php,Mysql,我在第26行得到错误,如我的浏览器所示 <?php $servername = "localhost"; $username = "root"; $password = ""; $database = "tut"; $conn = mysqli_connect($servername, $username, $password, $database); if (!$conn) { die("Database connection failed: ".mysqli_connect

我在第26行得到错误,如我的浏览器所示

<?php
$servername = "localhost";
$username = "root";
$password = "";
$database = "tut";

$conn = mysqli_connect($servername, $username, $password, $database);

if (!$conn) {
    die("Database connection failed: ".mysqli_connect_error());
}
 if (isset($_POST['register']))
{
    $user = $_POST['username'];
    $pass = $_POST['password'];
    $pass2=$_POST['password1'];

    if(empty($username)||empty ($password)||empty($password1)){
        echo "Oops! Can't leave any field blank";
    }
    elseif($pass!=$pass2){
        echo "Passwords don't match";
    }   
    else{
        $phash = sha1(sha1($pass."salt")."salt");
        $sql=IF NOT EXISTS (SELECT * FROM users WHERE username = '$user')
            INSERT INTO users (id, username, password) VALUES ('', '$user', '$phash')
        ELSE
            RAISERROR 'Username exists, please select a different one';
        $result = mysqli_query($conn, $sql);
    }
}
?>

这是如何做到的,我已经测试过了,它可以工作了:

$sql = "
    INSERT INTO users (username, password)
    SELECT * FROM (SELECT '$user', '$phash') AS tmp
    WHERE NOT EXISTS (
        SELECT username FROM users WHERE username = '$user'
    ) LIMIT 1;
";
此解决方案的灵感来源于此

问题是您不能像以前那样组合PHP和MySQL语句,您需要将所有MySQL语句封装在quote

什么来的
RAISERROR
,它不是MySQL函数,它属于微软

您可以很容易地使用php if语句来检查
$sql
是否包含有效的用户名并返回您的消息。这一部分留给您自己处理

XAMPP与错误无关,它只是一个为Windows提供Apache和MySQL安装的软件

注意:请学习使用参数化查询,因为 代码易受SQL注入攻击。感谢@BillKarwin提到这一点


这就是如何做到这一点,我已经测试了它,它可以工作:

$sql = "
    INSERT INTO users (username, password)
    SELECT * FROM (SELECT '$user', '$phash') AS tmp
    WHERE NOT EXISTS (
        SELECT username FROM users WHERE username = '$user'
    ) LIMIT 1;
";
此解决方案的灵感来源于此

问题是您不能像以前那样组合PHP和MySQL语句,您需要将所有MySQL语句封装在quote

什么来的
RAISERROR
,它不是MySQL函数,它属于微软

您可以轻松地使用php if语句检查
$sql
是否包含有效的用户名并返回消息。那部分留给你的幻想

XAMPP与错误无关,它只是一个为Windows提供Apache和MySQL安装的软件

注意:请学习使用参数化查询,因为 代码易受SQL注入攻击。感谢@BillKarwin提到这一点


如果我们不需要一个THEN@Haris+1来回答来自@maytham-的问题,那么就错过了THEN。另外,请学习使用参数化查询,因为您的代码容易受到SQL注入的攻击。是的,我已经解决了这个问题,并且我理解了我的错误,我将SQL wid PHP代码组合在一起。谢谢您的帮助,我没有完全按照您说的做,但我使用了您的意思@如果我们不需要THEN@Haris+1来回答@maytham-ɥɥɥɥɥɥʇɥɥɥɥɥɥɥʎɯ中的THEN,那么就错过了THEN。另外,请学习使用参数化查询,因为您的代码容易受到SQL注入的攻击。是的,我已经解决了这个问题,并且我理解了我的错误,我将SQL wid PHP代码组合在一起。谢谢您的帮助,我没有完全按照您说的做,但我使用了您的意思@梅瑟姆