【问题标题】:Why is my SQL "INSERT INTO" query not working?为什么我的 SQL“INSERT INTO”查询不起作用?
【发布时间】:2013-09-01 06:30:02
【问题描述】:

我正在为工作制作存储日志,过去两个小时我一直在使用此代码,但没有成功。出于某种原因,无论我检查和重新检查我的 INSERT INTO 查询的代码多少次,它都不起作用。

请记住,我从另一个具有基本相同功能且 100% 工作的页面几乎逐字复制了这段代码(显然更改了表单名称和字段)。代码如下:

这是包含提交交易的表单的页面:

<?php
$script = '<script> 
$(document).ready(function(){
    $(".datepicker").datepicker();
}); </script>' ; 
$title = "View/Edit Storage - " ;
include('inc/header.php'); 
?>
<table>
                <tr>
                <form action="transadded.php" name='addnewtransaction' method="POST">
                    <td><input type="text" name="moveID" size="20" value="<?php echo $results[moveid]; ?>" readonly> </td>
                    <td><select id="inoutselect" name="inorout">
                            <option value="Select">Select</option>
                            <option value="Storage In">Storage In</option>
                            <option value="Storage Out">Storage Out</option>
                        </select> </td>
                    <td><input type="text" name="numberofunits" size="20"></td>
                    <td><input type="text" name="dateoftransaction" size="20" class="datepicker"></td>
                    <td><input type="text" name="rrdt" size="20"> </td>
                    <td><input type="submit" value="Add" id="logsubmit"></td>
                </form>
                </table>
                <br /><br />
<?php   };?>

这是查询本身,又名“transadded.php”:

<?php
$title = "Project Added - ";
include('inc/header.php');
$query = "INSERT INTO newtransaction (moveid, inout, units, transdate, refno) VALUES('$_POST[moveID]','$_POST[inorout]','$_POST[numberofunits]','$_POST[dateoftransaction]','$_POST[rrdt]')";

if(!mysqli_query($con,$query))
{
die ('Error: ' . mysqli_error($con));
}
echo '<div class="transstatus">' . '1 record added' . '</div>';

mysqli_close($con);
?>

显然,标头包含连接到数据库的功能,正如我所说,另一个查询可以很好地使用它,所以我知道这不是问题。单击提交按钮后,我在页面上得到的错误如下:

错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法,以便在 'inout, units, transdate, refno) VALUES ('1234567','Storage In','81','09/11/2013'' at第 1 行

这里,“1234567”、“Storage In”等是我在表单中输入的值。

我希望你能帮助我。我被困住了!

另外,我知道我现在不受注射保护。我计划稍后再做,但我试图首先理顺功能。

【问题讨论】:

  • 如果没有准备好的语句,mysqli 是什么意思?
  • 表结构是什么样的?

标签: php mysql sql crud


【解决方案1】:

INOUT 是 MySQL 的保留字。

请看这里:http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

更改名称或将其放在引号中。

【讨论】:

  • 哇。我是最坏的。做到了。非常感谢。
  • @Foo hehe,我以为我知道所有的保留字。不错的皮卡。 +1
  • 它让每个人都明白——我不是 MySQL 专家,并且因为类似的问题而大发雷霆。很高兴它现在可以工作了! :)
【解决方案2】:

使用以下内容:

$query = "INSERT INTO newtransaction (
         `moveid`, `inout`, `units`, `transdate`, `refno`
    )
    VALUES(
        '{$_POST[moveID]}', '{$_POST[inorout]}',
        '{$_POST[numberofunits]}', '{$_POST[dateoftransaction]}',
        '{$_POST[rrdt]}'
    )
";

【讨论】:

  • OP提到了它,但我倾向于在问题中添加一个注释,说必须修复SQL注入漏洞,以免有人在没有完全阅读问题的情况下使用它.
【解决方案3】:
$query = "INSERT INTO newtransaction (moveid, inout, units, transdate, refno) 
VALUES
( '".$_POST['moveID']."','".$_POST['inorout']."','".$_POST['numberofunits']."',
   '".$_POST['dateoftransaction']."','".$_POST['rrdt']."')";

你喜欢='$_POST[dateoftransaction]'

正确的程序是如果你使用 wamp= '".$_POST['dateoftransaction']."'

希望你弄错了

费拉克姆

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 2021-09-04
    • 2020-12-02
    相关资源
    最近更新 更多