【问题标题】:SafeMySQL replaces FLOAT with INTSafeMySQL 将 FLOAT 替换为 INT
【发布时间】:2020-07-04 07:02:18
【问题描述】:

我需要在我的表中插入一个浮点数。我使用 SafeMySQL,所以我需要在查询中使用 ?s 来输入 FLOAT 数。我试过的:

$db -> query("INSERT INTO tablename(`certs`) VALUES(?s)", 4.123); // inserts 4
$db -> query("INSERT INTO tablename(`certs`) VALUES(?s)", floatval(4.123)); // inserts 4
$db -> query("INSERT INTO tablename(`certs`) VALUES(?s)", (string)4.123); // inserts 4

$db -> query("INSERT INTO tablename(`certs`) VALUES(?s)", '4.123'); // inserts 4.123
$db -> query("INSERT INTO tablename(`certs`) VALUES(4.123)"); // inserts 4.123

这也发生在所有其他表上。因此,要使用 SafeMySQL 插入 FLOAT,我必须将我的浮点数转换为字符串,或者在查询中插入纯值(这看起来与 SafeMySQL 的用途完全相反)。这看起来非常荒谬,我在网上找不到任何信息。

我只想插入一个 FLOAT 数字,我错过了什么吗?这里有什么问题? xD

谢谢!

【问题讨论】:

  • 我从未听说过 safemysql,我建议您使用 prepared statements 的标准方式。 '这至少是安全的
  • 嗨,根据您的最后一行示例$db -> query("INSERT INTO tablename(certs) VALUES(4.123)");,问题出在query 函数中,它在将SQL 发送到数据库之前将浮点数转换为整数,您需要阅读query 函数文档以查找是否有任何参数/方法可以避免这种情况。
  • 这是SafeMySQL source code。它并不是准备好的语句的真正包装器。其中没有绑定,字符串只是使用mysqli_real_escape_string 转义。我建议不要这样做,而是推荐prepared statementsPDO。除非有另一个同名的包装器,但我还没有找到它。
  • @El_Vanja 哇,谢谢分享。是的,这就是我的程序员为我们的服务选择的 SafeMySQL。我不知道它是如此过时并且几乎没有多大用处。我刚刚切换到准备好的语句,现在一切正常。谢谢。

标签: php mysql


【解决方案1】:

@El_Vanja 建议不要使用 SafeMySQL 并切换到 prepared statementsPDO,我这样做了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    相关资源
    最近更新 更多