【问题标题】:SQL query will fail with actual data but will work with test dataSQL 查询会因实际数据而失败,但会使用测试数据
【发布时间】:2021-05-06 02:23:59
【问题描述】:

所以,我尝试将一些数据插入表中,我从 GET 或另一个 SQL 查询中获取以前的数据(我的数据库由 INT 和 TEXT 组成,所以我认为那里没有问题)。 我有一个问题

$sql2 = "INSERT INTO orders (USER_NAME, USER_ID, ARTIST_ID, ARTIST_NAME, PRICE, DESCRIPTION, COMMENTS)
VALUES ('$user_name','$user_id','$artist_id','$artist_name','$price','$description','$comments')";

这个$sql2的回声如下

INSERT INTO orders (USER_NAME, USER_ID, ARTIST_ID, ARTIST_NAME, PRICE, DESCRIPTION, COMMENTS) VALUES ('myname','1',''1'','Actual Name','19.99','test','tst2')

但是,当我这样做时

if ($conn->query($sql2) === TRUE) {
  $conn->close();
echo "success";
exit();
} else {
  $conn->close();
echo "failed";
}

我得到了failed 打印。但是如果我把$sql2改成

VALUES ('test','test','test','test','test','test','test')";

查询已成功插入到我的数据库中(除了变成 0 的 int 值)。有人能告诉我为什么会这样吗?

【问题讨论】:

  • ...但是您的测试data 也无效...数字字段user_id = 'test', artist_id = 'test', price = 'test' 是实数吗?当然,这些值设置为 0。使用参数化查询来避免查询引用。如果你的任何价值观有一个,它就会破裂。更不用说,您所面临的 SQL 问题是完全开放的。
  • 第二个 1 用两个单引号括起来 - ...('myname','1',''1'','Actu... 这是复制+粘贴错误吗?
  • @garethhumphriesgkc ... 不错!我忽略了这一点。
  • @garethhumphriesgkc 你说得对,这不是复制粘贴错误……我忽略了这一点。我使用$_SESSION[] 得到了那个特定的变量,所以我猜这就是原因。
  • 另外,我不知道为什么会这样。如果我回显echo $_SESSION['ID'];,那么我得到 1 没有任何引号。如果我这样做$user_id = preg_replace('/[^0-9]/', '', $_SESSION['ID']); sql 查询仍然失败。

标签: php mysql sql sql-insert


【解决方案1】:

由于某种原因,您的 artist_id 值带有双引号,而其他值带有单引号,这可能是您的查询失败的原因(我已将其加粗):

INSERT INTO 订单(USER_NAME、USER_ID、ARTIST_ID、ARTIST_NAME、PRICE、DESCRIPTION、COMMENTS)值('myname','1',''1'','Actual Name',' 19.99','测试','tst2')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多