【问题标题】:Only numbers get inserted in sql只有数字被插入到 sql 中
【发布时间】:2011-06-09 23:00:29
【问题描述】:

所以我有这个表格

<form>Tag name:
    <input type='text' name='tagname' />
    <input type='submit' value='Add' />
    <input type='hidden' name='id' value='$id' />
</form>
<hr />

它运行这个脚本

if ($tagname) 
{   
    mysql_query("INSERT INTO tags (id, tag) VALUES ($id, $tagname)");
    ?>
    <script type="text/javascript">
    alert("Tag added.");
    history.back();
    </script>
    <?php
}   

如果我在表单中插入数字,它会很好地添加到 sql 数据库中,但如果它由字母字符组成,我会收到警报,但数据库中没有插入任何内容。 我检查了 phpmyadmin 是否结构错误(text/varchar/int...)尝试了其中的大多数,但它是相同的。

【问题讨论】:

  • 所有报价都有效,存在很多安全问题,但这是全新的问题:/它适用于本地主机。

标签: php sql forms


【解决方案1】:

您需要用单引号将 SQL 查询中的字符串括起来:

 mysql_query("INSERT INTO tags (id, tag) VALUES ('$id', '$tagname')");

我猜你也忘了事先申请mysql_real_escape_string。

【讨论】:

    【解决方案2】:
    mysql_query("INSERT INTO tags (id, tag) VALUES ($id, '$tagname')");
    

    非常常见的错误。考虑转义或更好的参数化查询。连接 SQL 查询是一种糟糕的方法(将一小段代码、HTML、PHP、SQL 和 JavaScript 放在一起也是如此)

    【讨论】:

      【解决方案3】:

      您需要在 mysql 查询中为 $id(除非它是一个数字)和 $tagname 加上引号。

      附带说明,这很容易受到 SQL 注入的攻击。

      【讨论】:

        【解决方案4】:

        我发现您的代码存在一些问题,首先设置 id 输入字段的值:

        <input type="hidden" name="id" value="<?php echo $id; ?>" />
        

        然后,在 SQL 中你应该使用引号:

        mysql_query("INSERT INTO tags (id, tag) VALUES ($id, '$tagname')");
        

        【讨论】:

          【解决方案5】:

          据我所知,根据您的代码以及您的转义方式,如果您没有 ajax 来获取您正在运行的 id,则:

          INSERT INTO tags (id, tag) VALUES (0, $tag)
          INSERT INTO tags (id, tag) VALUES ('', $tag)
          

          你真的应该在跑步:

          INSERT INTO tags (tag) VALUES ('$tag')
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-04-17
            • 1970-01-01
            相关资源
            最近更新 更多