【发布时间】:2015-01-02 14:07:43
【问题描述】:
这是我想分三步做的事情。
1-) 从表单中获取名称。正在将名称输入到表单中,它们之间使用逗号。
2-) 从数据库中获取名称的 ID。
3-) 将这些名称插入表中。
我希望我清楚我想做什么。
这是我到目前为止所做的。 (我正在处理单个页面,此处排除了表单)
$writer_name = "Franz Kafka, Agatha Christie, George Bernard Shaw"; // I used a
//variable instead of using a form value here
$thing_id = 10;
$values_select = explode(",", $writer_name);
echo $values_select[0]; // returns Franz Kafka, our explode function worked
$who = "SELECT writer_id FROM writer_name WHERE writer_name = '$values_select[]'";
// I stuck here, I need to get all the writer's ID's and store it in an array
// in order to insert below X times (depends on how many writers are entered), right? But how?
$who_result = $sqli->query($who);
$who_row = $who_result->fetch_array();
$who_finish = $who_row['writer_id'];
$values = explode(",", $writer_name);
$control = count($values) - 1;
$new_values = $sqli->prepare("INSERT INTO book(thing_id, person_id) VALUES(?,?)");
for ($i = 0; $i < count($values); $i++) {
if (!empty(trim($values[$i]))) {
$new_values .= "('" . trim($values[$i]) . "')";
}
if ($control == $i) {
$new_values .= ";";
} else $new_values .= ",";
}
$thing->bind_param("ii", $thing_id, $values[$i]); // using integer because I insert data into a junction table that accepts only ID values)
$thing->execute();
【问题讨论】:
-
使用 WHERE writer_name IN ($writer_name) 您可以传递 IN 逗号分隔的列表,它将返回 writer_name 在列表中的那些记录。参见示例:techonthenet.com/sql/in.php
-
此外,SQL 比您想象的要强大得多。您的大部分 PHP 代码都可以被抛弃,并将工作转移到数据库中。
-
... = '$values_select[]'是“不可能”的代码。您正在生成文字查询文本... = 'Array[]',它不会匹配任何内容。 -
@i-CONICA,我现在会调查。谢谢。
-
@Marc B,我用它作为一个虚拟文本来展示它,不知道该放什么。