【问题标题】:Mysql add primary key from a table to others two tablesMysql将主键从一个表添加到其他两个表
【发布时间】:2018-03-08 09:59:17
【问题描述】:

我有三个表(表 A、表 B、表 C)。

我想将“表A”中的主键添加到“表B,C”的列中,并带有一个提交按钮。

表 B、C 有自己的主键。

**|table A|**
|primary key|Column 1|Column2|
|    AI     |  test  | test  |
------------------------------

**|table B|**
|Primary key|           Column 1         |Column 2|
|    AI     |Add Primary key from table A|  test  |
----------------------------------------------------

**|table C|**
|Primary key|           Column 1         |Column 2|
|   AI      |Add Primary key from table A|  test  |

如您所见,我希望在第 1 列中,在表 B 和 C 中,添加表 A 中的主键。这是我使用的 php 代码:

$sql = "INSERT INTO `table A` (Column 1, Column 2)VALUES(test, test')";
$sql_B = "INSERT INTO `table B` (Column 1, Column 2)VALUES(LAST_INSERT_ID(), test)";
$sql_C = "INSERT INTO `table C` (Column 1, Column 2)VALUES(LAST_INSERT_ID(), test)";

问题是,$sql 有效,$sql_B 有效(从表 A 中的前一个 INSERT 中获取 LAST_INSERT_ID()),但第三个查询从表 B 中获取 LAST_INSERT_ID(),这是正常的,但不是我想要的。有没有办法在变量中分配 LAST_INSERT_ID() 并在 sql 查询中添加这个变量。

任何意见都可以。

【问题讨论】:

标签: php mysql primary-key


【解决方案1】:

你可以在最后一张桌子上尝试这样的事情:

$sql_C = "INSERT INTO `table C` (Column 1, Column 2)VALUES((SELECT Primary key FROM `table A`), test)";

【讨论】:

  • 抱歉,table_B、table_C 中没有插入任何内容。
【解决方案2】:

php中有一个插入last id的函数,你可以用这个

$conn 是你的连接变量

$last_id = mysqli_insert_id($conn);

【讨论】:

  • 这在 columns_1 中返回“0”。
  • 当我回显 $last_id;它的“0”到
  • 是在第一次查询之后(对于 table_A)和 $sql_B、$sql_C 之前。对吗?
  • 我用 $connection 替换了 $conn(我的 conect 对象)
  • 您的第一个表的列 ID 是否设置为自动递增?
【解决方案3】:

根据您拥有的代码,我将进行更改。复制下面的代码来替换你的最终代码

if(isset($_POST['create_record'])){
// αντιστοίχηση πεδίων με τις μεταβλητές για τον πίνακα 'truck_records'
$user_id = mysqli_real_escape_string($connection, $_POST['user_id']);
$user_ip = mysqli_real_escape_string($connection, $_POST['user_ip']);
$company_name = mysqli_real_escape_string($connection, $_POST['company_name']);
$nick_enable = mysqli_real_escape_string($connection, $_POST['nick_enable']);
$company_nick_name = mysqli_real_escape_string($connection, $_POST['company_nick_name']);
$driver_kind = mysqli_real_escape_string($connection, $_POST['driver_kind']);
$driver_name = mysqli_real_escape_string($connection, $_POST['driver_name']);
$invoice = mysqli_real_escape_string($connection, $_POST['invoice']);
$shipping_note = mysqli_real_escape_string($connection, $_POST['shipping_note']);
$invoice_number = mysqli_real_escape_string($connection, $_POST['invoice_number']);
$invoice_amount = mysqli_real_escape_string($connection, $_POST['invoice_amount']);
$comments = mysqli_real_escape_string($connection, $_POST['comments']);
// αντιστοίχηση πεδίων με τις μεταβλητές για τον πίνακα 'truck_weights'
$weight_tr_full = mysqli_real_escape_string($connection, $_POST['weight_tr_full']);
$weight_tr_empty = mysqli_real_escape_string($connection, $_POST['weight_tr_empty']);
$weight_product = mysqli_real_escape_string($connection, $_POST['weight_product']);
$weight_tr_full_date = mysqli_real_escape_string($connection, $_POST['weight_tr_full_date']);
$weight_tr_empty_date = mysqli_real_escape_string($connection, $_POST['weight_tr_empty_date']);
// αντιστοίχηση πεδίων με τις μεταβλητές για τον πίνακα 'material_weight'
$material_1 = mysqli_real_escape_string($connection, $_POST['material_1']);
$material_wei_1 = mysqli_real_escape_string($connection, $_POST['material_wei_1']);
$material_2 = mysqli_real_escape_string($connection, $_POST['material_2']);
$material_wei_2 = mysqli_real_escape_string($connection, $_POST['material_wei_2']);
$material_3 = mysqli_real_escape_string($connection, $_POST['material_3']);
$material_wei_3 = mysqli_real_escape_string($connection, $_POST['material_wei_3']);
$material_4 = mysqli_real_escape_string($connection, $_POST['material_4']);
$material_wei_4 = mysqli_real_escape_string($connection, $_POST['material_wei_4']);
$material_5 = mysqli_real_escape_string($connection, $_POST['material_5']);
$material_wei_5 = mysqli_real_escape_string($connection, $_POST['material_wei_5']);
$material_6 = mysqli_real_escape_string($connection, $_POST['material_6']);
$material_wei_6 = mysqli_real_escape_string($connection, $_POST['material_wei_6']);
$material_7 = mysqli_real_escape_string($connection, $_POST['material_7']);
$material_wei_7 = mysqli_real_escape_string($connection, $_POST['material_wei_7']);
$material_8 = mysqli_real_escape_string($connection, $_POST['material_8']);
$material_wei_8 = mysqli_real_escape_string($connection, $_POST['material_wei_8']);
$material_9 = mysqli_real_escape_string($connection, $_POST['material_9']);
$material_wei_9 = mysqli_real_escape_string($connection, $_POST['material_wei_9']);
$material_10 = mysqli_real_escape_string($connection, $_POST['material_10']);
$material_wei_10 = mysqli_real_escape_string($connection, $_POST['material_wei_10']);

$sql_record = "INSERT INTO `truck_records` (
user_id, user_ip, company_name, nick_enable, company_nick_name, driver_kind, driver_name, 
invoice, shipping_note, invoice_number, invoice_amount, comments
)VALUES(
'$user_id', '$user_ip', '$company_name', '$nick_enable', '$company_nick_name', '$driver_kind', '$driver_name', 
'$invoice', '$shipping_note', '$invoice_number', '$invoice_amount', '$comments')";

$sql = new mysqli($host, $username, $password, $database_name); //use this connection here. asign your host, username, password, database_name to the the variables.

$result_record = $connection->query($sql_record);
$last_insert_id = $connection->insert_id;

$sql_weight = "INSERT INTO `truck_weights` (
truck_weight_record_id, 
user_id,
weight_tr_full,
weight_tr_empty,
weight_product,
weight_tr_full_date,
weight_tr_empty_date
)VALUES(
'$last_insert_id',
'$user_id', 
'$weight_tr_full', 
'$weight_tr_empty', 
'$weight_product', 
'$weight_tr_full_date', 
'$weight_tr_empty_date')"; 

$connection->query($sql_weight);

$sql_material = "INSERT INTO `material_weight` (
mat_record_id,  
material_weight,
material_name
)VALUES(
'$last_insert_id', 
'$material_wei_1',
'$material_1')";

$connection->query($sql_material);

if($result_record){
    $smsg = 'WORK. ';
}else{
    $fmsg = 'NOT WORK. ';
}
echo $fmsg . "<br>";
echo $sql_record . "<br>";
echo $sql_weight . "<br>";
echo $sql_material . "<br>";

}

【讨论】:

  • 它返回这个错误:致命错误:调用未定义的方法 mysqli::execute()
  • 您正在使用 mysqli.i 将编辑 mysqli 驱动程序的代码
  • 我编辑了代码。您现在可以将它用于 mysqli 驱动程序
  • 是的,我将 $conn 替换为 $connection(我的 $conn),我没有使用 $conn = new mysqli("host", "username", "password", "database_name");跨度>
  • 和 $last_insert_id 工作唯一的问题是我在 table_A 中有双重插入
【解决方案4】:

这就是我使用的解决方案:

$sql = "INSERT INTO `table A` (Column 1, Column 2)VALUES(test, test')";
$sql_B = "INSERT INTO `table B` (Column 1, Column 2)VALUES((select MAX(id) FROM table A), test)";
$sql_C = "INSERT INTO `table C` (Column 1, Column 2)VALUES((select MAX(id) FROM table A), test)";

通过这种方式,我有来自特定表 A 的最后一个 id,(最大 id)总是表 A 的最后一个 id

【讨论】:

    猜你喜欢
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 2015-07-22
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多