PHP

时间:2017-03-15 01:19:21

标签: php sql mysqli

我尝试使用以下代码使用userid参数编辑数据库中的行。

但是使用代码我得到了这个错误:

  

您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便使用接近' SET firstname = IF(?<>'',?,firstname),SET surname = IF( ?<'第3行

我真的不确定问题是什么,因为一切都在SQL查询中按顺序查看。我已经尝试取出IF(?<>'',?),但它仍然会出错。我仔细检查了表中的所有列名是否正确。我究竟做错了什么?

<?php


        include 'database_conn.php';

        if(!$conn)
        {
            echo "Error connecting to database";
        }

        if (mysqli_connect_errno()) 
        {
            echo "<p>Connection failed:".mysqli_connect_error()."</p>\n";
        }


        $id = isset($_GET['userId']) ? $_GET['userId'] : NULL; 

        $newUsername = isset($_REQUEST['updateUsername']) ? $_REQUEST['updateUsername'] : NULL;
        $newEmail = isset($_REQUEST['updateEmail']) ? $_REQUEST['updateEmail'] : NULL;
        $newPassword = isset($_REQUEST['updatePassword']) ? $_REQUEST['updatePassword'] : NULL;
        $newForename = isset($_REQUEST['updateForename']) ? $_REQUEST['updateForename'] : NULL;
        $newSurname = isset($_REQUEST['updateSurname']) ? $_REQUEST['updateSurname'] : NULL;
        $newDob = isset($_REQUEST['updateDob']) ? $_REQUEST['updateDob'] : NULL;


        $sql = "UPDATE Users
                SET username = IF(? <> '', ?, username),
                SET firstname = IF(? <> '', ?, firstname),
                SET surname = IF(? <> '', ?, surname),
                SET email = IF(? <> '', ?, email),
                SET password = IF(? <> '', ?, password),
                SET dateofbirth = IF(? <> '', ?, dateofbirth)
                WHERE id = ?";


        $stmt = mysqli_prepare($conn, $sql)
            or die(mysqli_error($conn));  

        mysqli_stmt_bind_param($stmt, "ssssssi", $newUsername, $newForename, $newSurname, $newEmail,
                            $newPassword, $newDob, $id)
            or die(mysqli_error($conn));  

        mysqli_stmt_execute($stmt)
            or die(mysqli_error($conn));  




        if($stmt)
        {
            echo "Details updated successfully";   
        }
        else
        {
            die(mysqli_error($conn));  
        }

        mysqli_close($conn);

        ?>

1 个答案:

答案 0 :(得分:1)

MySQL&#34;更新&#34;仅使用以逗号分隔的一个 function capFunction() { jQuery.get("CSCI-Classes.txt", function(data) { var group=data.split("/n"); document.getElementById("testDisplay").innerHTML = group[1]; }); }

您的查询应为:

SET

并且看到您基于以下Q&amp; A,已经更改了它的语法:

根据您留给我的链接in the comments area

你在评论中说这不是一个现场网站。但是,如果您决定使用此功能,请使用$query = " UPDATE `users` SET `username` = IF(? <> '', ?, `username`), `firstname` = IF(? <> '', ?, `firstname`), `surname` = IF(? <> '', ?, `surname`), `email` = IF(? <> '', ?, `email`), `password` = IF(? <> '', ?, `password`), `dateofbirth` = IF(? <> '', ?, `dateofbirth`) WHERE `id` = ? "; password_hash()

参考文献:

由于存储纯文本密码很危险。

注意:密码列的长度必须为60+。该手册暗示255是一个不错的选择。