【问题标题】:MYSQL Only numbers can be inserted to tableMYSQL 只能将数字插入到表中
【发布时间】:2018-07-16 20:47:55
【问题描述】:

我有一个名为 cashreg 的 MySQL 表,它只有一行也称为 cashreg,并设置为 VARCHAR 64 和 utf8_general_ci。问题是在使用这种形式时:

 <td>
<input placeholder="<?php echo SETTINGS_NEWCASHIER; ?>" class="form-control floating-label" name="newCashregInput" id="newCashreg" /></br>
<input style="width: 100%;" class="btn btn-success waves-effect waves-light" type="submit" name="newCashreg" id="newCashreg" align="right" value="Pridėti kasos aparatą"></input>
</td>

和

if(isset($_POST['newCashreg'])) {
    mysql_query("INSERT INTO ".$table['cashreg']." VALUES (".$_POST['newCashregInput'].")");
}

如果值仅由数字组成,例如“984133”且无法添加例如“851fff”、“gsdagsd”、“fsdfas521”,则可以将此表单中的数据添加到表中

【问题讨论】:

  • SQL注入漏洞警告,修复你的代码使用prepared statements
  • 停止使用 mysql_query,使用 PDO 或 mysqli。开始使用准备好的语句,永远不要将用户输入 ($_POST) 直接放入查询中。当您的查询失败时,Mysql 会报告错误,请在来这里之前收集这些错误。
  • 它是关闭和旧项目,所以我使用mysql_query

标签: php html mysql forms


【解决方案1】:

您需要在 SQL 查询中指定列名以插入记录。见https://www.w3schools.com/sql/sql_insert.asp

【讨论】:

  • 指定列存在相同问题
【解决方案2】:

我建议你研究一下 PDO。您的代码不安全。

但你的问题的答案是 qoutes。连接 SQL 语句后它是错误的。 所以正确的字符串应该是INSERT INTO cashreg VALUES ('value')

您可以毫无问题地插入数字,但如果您尝试插入字母数字字符串,则需要将其引用。 更多信息https://dev.mysql.com/doc/refman/8.0/en/string-literals.html

<?php if(isset($_POST['newCashreg'])) { mysql_query("INSERT INTO $table['cashreg']."VALUES('".$_POST['newCashregInput']."')"); }

【讨论】:

    【解决方案3】:

    您的语法错误。应该是:

    INSERT into tablename (columnx, columny, etc) VALUES ('valX', 'valY', 'etc')
    

    停止使用古老的 mysql 库。它已从 PHP 中删除。请改用 PDO。和预处理语句一样,您当前的代码容易受到 SQL 注入攻击。

    https://phpdelusions.net/pdo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-01
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      相关资源
      最近更新 更多