【问题标题】:Can not send information from PHP form to multiple mysql database tables无法将信息从 PHP 表单发送到多个 mysql 数据库表
【发布时间】:2012-08-07 11:35:23
【问题描述】:

我正在尝试将数据插入 4 个表(资产、资产详细信息、发票和位置)。当我提交表单时,它告诉我所有数据都已成功提交,但是当我检查 MySQL 数据库时,信息仅提交到位置表。

任何帮助将不胜感激,谢谢。

    mysql_query("START TRANSITION");

    $query1 =("INSERT INTO .asset (asset_tag, asset_number, cap_ex, asset_type_id, invoice_id, status) 
        Values(".$_POST['asset_tag'] .",,,".$_POST['asset_type'] . ",".$_POST['invoice_number']."," . $_POST['status_id'] .")");

    $query2 =("INSERT INTO .asset_details (asset_type_id, asset_tag, asset_type, physical_asset_id, manufacturer, os, os_version, make, model, serial_number, processor, ram, memory, hdd, host_name, notes)
        Values(" .",".$_POST['asset_tag']."," .$_POST['asset_type'].",,
        ,".$_POST['os'].",".$_POST['os_version'].",".$_POST['make'].",".$_POST['model'].",".$_POST['serial_number'].",".$_POST['processor'].",,".$_POST['memory'].",".$_POST['hdd'].",,".$_POST['notes'].")");

    $query3 =( "INSERT INTO .invoice (invoice_number, invoice_date, purchas_price, quantity, order_date, vender, warrenty_end, notes)   
        Values(" .$_POST['invoice_number'].",". $_POST['invoice_date'].",". $_POST['purchase_price'].",,,". $_POST['vender'].")");

    $query4 =( "INSERT INTO .location (location_name, rack, row, unit)
        Values(" .$_POST['location_name'].",".$_POST['rack'].",".$_POST['row'].",".$_POST['unit'].")");

    echo "$query1 $query2 $query3 $query4";


    $result1= mysql_query($query1);
    $result2= mysql_query($query2);
    $result3= mysql_query($query3);
    $result4= mysql_query($query4);

    $result = mysql_query("COMMIT");    

if (!$result)
{
    mysql_query("ROLLBACK");
    die('Invalid query: ' . mysql_error());
}
else
{
    echo "<script>alert('SUCCESS!');</script>";
}
}


mysql_close($con);
?>

【问题讨论】:

  • 您的字符串值周围没有引号! echo $query... 会产生什么?
  • 你是怎么想到mysql_query("START TRANSITION");...
  • 不应该是mysql_query("START TRANSACTION");吗?
  • 请不要再使用mysql_*。在编写新代码时使用PDOmysqli_*

标签: php mysql


【解决方案1】:

有一些奇怪的事情;

  • START TRANSITION 应该是 START TRANSACTION
  • 您没有引用任何字符串值。需要使用' a'la INSERT INTO TEST VALUES ('olle'); 引用字符串
  • 不能通过跳过它来指示空字段,您正在执行INSERT INTO TEST (a,b,c) VALUES (1,,2);,这不是不设置 b 的有效语法。

另外,我建议使用比 mysql_query 更现代的 mysql api,例如 PDO or mysqli,因为将 POST 值注入字符串可能非常危险,可能会导致 SQL 注入问题。

【讨论】:

  • 抱歉,我是 mySQL 和 PHP 的新手,不确定第三点的正确语法。 " 不能通过跳过它来指示空字段,您正在执行 INSERT INTO TEST (a,b,c) VALUES (1,,2); 这不是不设置 b 的有效语法。”
【解决方案2】:

在每个属性(列)周围使用'`',在每个值周围使用''',它应该可以工作

在开发过程中,我会在将每个查询表达式发送到数据库之前对其进行回显。

...顺便说一句,mysql_error()是php中一个很有用的函数,它返回mysql最后的错误信息...。你可以用它来调试

【讨论】:

    猜你喜欢
    • 2012-02-09
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多