【问题标题】:INSERT INTO fails with no errorsINSERT INTO 失败且没有错误
【发布时间】:2022-02-12 05:49:25
【问题描述】:

我正在尝试使用 PHP 和 Mysql 进行 INSERT INTO。

这是SQL语句,在PHPMyadmin中成功:

INSERT INTO purchase_orders VALUES (
    DEFAULT, 
    '501',
    '80999',
    '149179',
    'EB-0408898',
    '1',
    'Thompson Center Barrel Encore 26\" Stainless Steel Fluted 35 Whelen 4767',
    '294.43',
    '4767',
    'UPS Ground',
    '11.61',
    'LA',
    'P',
    '1',
    '264.99', 
    DEFAULT, 
    DEFAULT
)

这是我运行 SQL 的 PHP 语句:

$sql = "INSERT INTO purchase_orders VALUES (
    DEFAULT, 
    '".mysql_real_escape_string($po_num)."',
    '".mysql_real_escape_string($order_id)."',
    '".mysql_real_escape_string($product_id)."',
    '".mysql_real_escape_string($product_code)."',
    '".mysql_real_escape_string($amount)."',
    '".mysql_real_escape_string($product)."',
    '".mysql_real_escape_string($price)."',
    '".mysql_real_escape_string($mfg_code)."',
    '".mysql_real_escape_string($shipping_method)."',
    '".mysql_real_escape_string($shipping_cost)."',
    '".mysql_real_escape_string($s_state)."',
    '".mysql_real_escape_string($status)."',
    '".mysql_real_escape_string($dist_code)."',
    '".mysql_real_escape_string($dist_cost)."', 
    DEFAULT, 
    DEFAULT)";
mysql_query($sql, $dbc);
echo mysql_errno($dbc) . ": " . mysql_error($dbc). "\n";

我完全不明白为什么插入语句不适用于 PHP。

我也试过这个 SQL 代码,结果相同...

INSERT INTO purchase_orders(po_num, order_id, product_id, product_code, amount, product, price, mfg_code, shipping_method, shipping_cost, s_state, status, dist_code, dist_cost) VALUES ('501','80999','149179','EB-0408898','1','Thompson Center Barrel Encore 26\" Stainless Steel Fluted 35 Whelen 4767','294.43','4767','UPS Ground','11.61','LA','P','1','264.99')

【问题讨论】:

  • 与 mysqli / pdo_mysql 相同,或者是否可以使用默认的 mysql 扩展?表结构如何? $dbc 是资源吗?
  • 你可以在调用mysql_query之前回显$sql语句,只是为了证明部分代码实际上被调用了吗?
  • 这就是我显示上面的 SQL 代码框的内容。
  • $dbc = mysql_connect($db_host, $db_user, $db_password); if (!$dbc) { print"
    "; die('无法连接:' . mysql_error());打印"
    "; }

标签: php mysql


【解决方案1】:

不要在字段中使用DEFAULT

INSERT INTO purchase_orders (<colname1>,<colname2>,.....) VALUES ( '501','80999','149179','EB-0408898','1','Thompson Center Barrel Encore 26\" Stainless Steel Fluted 35 Whelen 4767','294.43','4767','UPS Ground','11.61','LA','P','1','264.99')

而是通过将插入值与列相关联来使用它。

【讨论】:

    【解决方案2】:

    如果您只想让它插入默认值,您可以将这些列的值设置为空。像这样:

    INSERT INTO purchase_orders VALUES (null, '501','80999','149179','EB-0408898','1','Thompson Center Barrel Encore 26\" Stainless Steel Fluted 35 Whelen 4767','294.43','4767','UPS Ground','11.61','LA','P','1','264.99', null, null)
    

    数据库会发现它需要将默认值放在您要求为空的列中。

    【讨论】:

    • INSERT INTO purchase_orders VALUES (NULL, '501','80999','149179','EB-0408898','1','Thompson Center Barrel Encore 26\" 不锈钢凹槽 35 Whelen 4767','294.43','4767','UPS Ground','11.61','LA','P','1','264.99', NULL, NULL) - 在 phpmyadmin 中工作,不能使用 PHP 和仍然没有错误。
    • 是否总是将 NULL 替换为默认值,还是仅在字段未指定 NOT NULL 时替换?
    【解决方案3】:

    您可以向数据库中插入任何内容吗?您的代码中的mysql_query($sql, $dbc); 部分是否有效?

    没有必要在表中插入默认值,毕竟它们是默认值。当然,这很好地提醒了您的表结构,但我会忽略它。

    否则,如果您喜欢 VIPIN JAIN,建议一切正常。定义要插入值的列。如果列的数据类型是整数,您可以在查询中省略单引号。

    仍然很奇怪您没有收到任何错误消息。您确定您的数据库连接正常吗?


    更新。尝试这个。命名列并删除 real_escape_string() 函数。如果这可行,请添加它或在连接查询之前清理变量。如果这不起作用,请仔细检查值和表结构中的无效值。在 real_escape_string() 函数之前和之后回显您尝试分配给 $sql 的值。也许它做了一些特别的事情。

    $sql = "INSERT INTO `purchase_orders` (`column1`,`column2`,`column3`,`column4`,'";
    $sql .= "`column5`,`column6`,`column7`,`column8`,`column9`,`column10`,";
    $sql .= "`column11`,`column12`,`column13`,`column14`)";
    $sql .= " VALUES ('{$po_num}','{$order_id}','{$product_id}',";
    $sql .= "'{$product_code}','{$amount}','{$product}','{$price}',";
    $sql .= "'{$mfg_code}','{$shipping_method}','{$shipping_cost}',";
    $sql .= "'{$s_state}','{$status}','{$dist_code}','{$dist_cost}')";
    

    【讨论】:

      猜你喜欢
      • 2017-11-07
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      • 2012-10-08
      相关资源
      最近更新 更多