PHP & MySQL INSERT INTO 问题

Posted

技术标签:

【中文标题】PHP & MySQL INSERT INTO 问题【英文标题】:PHP & MySQL INSERT INTO problem 【发布时间】:2011-05-18 21:25:05 【问题描述】:

知道为什么用户填写表单后,以下代码不会向数据库中添加任何内容吗?我真的很感激。

谢谢!

    if($_SESSION['loginSuccess']==1) 

        // ============================================================
        // = Create the table of current tasks stored in the database =
        // ============================================================
        $userID = $_SESSION['userID'];
        $result = mysql_query("SELECT * FROM Tasks WHERE userID = '$userID'");
        echo "<div id=\"draggable\" class=\"ui-widget-content\"><table border='5'><tr class=\"ui-widget-header\"><td><u>Task Name:</u></td><td><u>Class:</u></td><td><u>Due Date:</u></td><td><u>Task Type:</u></td></tr>";
        echo $_SESSION['userID'];
        while($row = mysql_fetch_array($result)) 
            $taskName = $row[1];

            $class = $row[2];

            $taskDueDate = $row[3];

            $taskType = $row[4];


            echo "<tr><td>'$taskName'</td><td>'$class'</td><td>'$taskDueDate'</td><td>'$taskType'</td></tr>";
        
        echo "</table>";

        function addNewTask ($name, $class, $dueDate, $type) 
            mysql_query("INSERT INTO Tasks VALUES ('$userID','$name', '$class', '$dueDate', '$type')");
        

    if($_POST['taskName'] != NULL) 
            addNewTask($_POST['taskName'], $_POST['class'], $_POST['dueDate'], $_POST['dueDate']);
        

?>


<!-- <img border="1"  src="/newTask.png" id="newTask" onmouseClick="showTaskField"/> -->
<p><form name="newTask" method="post" action="index.php" id="newTask"><br>
    Task Name: <input name="taskName" type="text"> (necessary)<br>
    Class: <input name="class" type="text"><Br>
    Due Date: <input name="dueDate" type="text" id="datepicker"><Br>
    Type: 
    <input type="submit"></p></div>

【问题讨论】:

哇,哇,哇! SQL Injection 警告!请阅读有关保护您的查询的内容(我认为使用PDO 和prepared statements 是最好的解决方案,但也有一些),然后检查1)addNewTask 正在运行吗? 2) 查询是否返回错误? (打印mysql_error() 找出答案) 调试您的mysql_query 调用,检查它是否返回true,并使用mysql_error 找出如果它返回false 时出了什么问题。 你真的应该escape the strings you pass to SQL。 阅读下面关于 mysql 错误的 cmets。哈哈关于忘记转义引号。谢谢提醒。 【参考方案1】:

尝试去掉插入语句中变量周围的 '。如果这没有回显mysql_error()

【讨论】:

在之前的 INSERT INTO 语句(有效)中,我必须在变量周围加上单引号。 mysql_error() 给我的错误是:键 'PRIMARY' 的重复条目 '0'。我一开始有主键,但删除了它们。现在我没有主键。 @joshim 好吧,显然你确实在你的数据库中有主键。 实际上,我现在意识到我没有办法从中删除主键。每个表都需要一个主键吗? @joshim5:您不需要主键,但如果您打算引用特定任务,强烈建议您这样做。一旦需要编辑或删除,您可能会这样做。无论如何,您似乎可能以某种方式删除了 ID 列,但保留了主键索引。

以上是关于PHP & MySQL INSERT INTO 问题的主要内容,如果未能解决你的问题,请参考以下文章

php mysql/mysqli sql插入id

PHP 用于单个 MySQL 多行 INSERT,每行带有 LAST_INSERT_ROW?

php mysql_insert_id()

PHP PHP:使用数组将数据插入MySQL表[mysql] [php] [array] [INSERT]

获取 mysql(innodb) AUTO_INCREMENT Column、JDBC/getGeneratedKeys()/last_insert_id (in OkPacket) 和 LAST_I

PHP:使用数组[MySQL][PHP][Array][Insert]将数据插入MySQL表