2013-08-07 68 views
-1

我有一个汽车的应用程序,所以汽车有一堆信息可用于计数 现在我保持在一个名为auto的表上必不可少的,然后我做了一个巨大的表为attributes 很酷。 现在我希望我可以在相同的PDO下插入相同的阵列中的数据,以两个不同的表我可以从同一个语句插入两个不同的表吗?

$sql = "INSERT INTO auto(year, make, model, mileage, price, vin, att1, att2, 
    att3, att4, picture1, picture2, picture3, picture4, picture5, picture6, picture7, picture8, 
    picture9, picture10, picture11, picture12) 
    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; 

我可以这样做'AND INSERT INTO attributes ('

$sth = $dbh->prepare($sql); 
     $final = array_merge(array_values($vehicleinfo),array_values($paths)); 
     $sth->execute($final); 
     echo '<h4 id="successMessage" style="color: red;">Vehicle added succesfully</h4>'; 
+2

简短的回答 - 你不能。 –

+0

你应该考虑把图片外包到另一张桌子上。这可能导致一个地狱的维护。我建议阅读关于数据库规范化。 –

+0

你可以构建一个存储过程来封装你想要的业务逻辑,我认为你可以用相同的方式绑定参数,当你调用存储过程 – KeepCalmAndCarryOn

回答

1

我会试图循环遍历你想运行SQL的表;

$tables = array('auto', 'attributes'); 

foreach($tables as $table) { 

    $sql = 'INSERT INTO '.$table.' (year, make, model, mileage, price, vin, att1, att2, att3, att4, picture1, picture2, picture3, picture4, picture5, picture6, picture7, picture8, picture9, picture10, picture11, picture12) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; 

    $sth = $dbh->prepare($sql); 
    $final = array_merge(array_values($vehicleinfo), array_values($paths)); 
    $sth->execute($final); 

    echo '<h4 id="successMessage" style="color: red;">Vehicle added successfully to '.$table.'</h4>'; 

} 

或者简单地创建一个函数,以便您可以将所需的表传递给它;

insertVehicleInfo('auto'); 
insertVehicleInfo('attributes'); 

function insertVehicleInfo($table) { 

    $sql = 'INSERT INTO '.$table.' (year, make, model, mileage, price, vin, att1, att2, att3, att4, picture1, picture2, picture3, picture4, picture5, picture6, picture7, picture8, picture9, picture10, picture11, picture12) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; 

    $sth = $dbh->prepare($sql); 
    $final = array_merge(array_values($vehicleinfo), array_values($paths)); 
    $sth->execute($final); 

    echo '<h4 id="successMessage" style="color: red;">Vehicle added successfully to '.$table.'</h4>'; 

} 
+0

什么在这个世界上 –

+1

您的问题的解决方案。你想对同一组数据做同样的事情,所以要么循环遍历你想要插入的两个表,要么创建一个函数来传递表名,这是做你想做的事情的最简单的方法实现。 – olimortimer

+0

我将如何确保属性表从其他自动表中获取正确的auto_id,其中也有一个主键和自动增量auto_id –

2

上插入添加触发器进入第一表中插入同样进入第二个。

+0

触发器?我应该只是运行一个单独的SQL,因为它有点长,但我希望通过触发 –

+2

来理解你的意思。只需谷歌它,你会看到:) –

+0

@ N.B。显然触发器在这种情况下有点不好,他们看起来很难保持,我想尽可能在​​代码中而不是在声明中管理sql。很高兴知道触发器tho,谢谢。 –

相关问题