首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果不存在,当我试图使用时,“未识别的SQL语句”意味着什么?

问如果不存在,当我试图使用时,“未识别的SQL语句”意味着什么?
EN

Stack Overflow用户
提问于 2017-05-28 08:17:20
回答 1查看 131关注 0票数 0

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

代码语言:javascript
复制
<?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);
    }
}
?>

如果不存在语句,这不是一种正确的编写方法吗。同样,当我试图在XAMPP中直接执行这个操作时,我会得到未识别的SQL语句错误!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-28 17:56:20

这是怎么做的,我已经测试过了,它是有效的:

代码语言:javascript
复制
$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;
";

此解决方案来自于此answer。

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

RAISERROR,它不是MySQL功能,它属于微软。

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

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

注意:请学习如何使用参数化查询,因为您的代码容易受到SQL注入的影响。感谢@BillKarwin提到这一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44225192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档