【问题标题】:Use MySQLi Prepared Statement to Enter Dynamic, Multiple Rows into Database?使用 MySQLi Prepared Statement 将动态的多行输入数据库?
【发布时间】:2012-03-30 09:37:26
【问题描述】:

我创建了一个 HTML 表单,用户可以在其中提交他们的姓名、电子邮件和语言技能。由于用户可能会说一种以上的语言,因此用户可以通过单击“添加”按钮来生成其他行。

然后表单将被提交并输入到 MySQL 数据库中。我使用两个表来保存接收到的数据,而第一个表中的用户 ID 将自动递增:

| (user-id) | name | email|
| user-id | language | proficiency|

现在我正在尝试编写 PHP 代码,它看起来像这样:

$name = $_POST['name'];
$email = $_POST['email'];

$add_table1 = $mysqli->prepare("INSERT INTO table1 (name, email) VALUES (?, ?)");
$add_table2 = $mysqli->prepare("INSERT INTO table2 (user_id, language, proficiency) VALUES (?, ?, ?)");

$add_table1->bind_param("ss", $name, $email);
$add_table1->execute();
$user-id = $mysqli->insert_id;

foreach($_POST['language'] as $index => $language) {
    $index = intval($index);
    $language = mysql_real_escape_string($language);
    $proficiency = mysql_real_escape_string($_POST['proficiency'][$index]);
    $add_table2->bind_param("iss", $user-id, $language, $proficiency);
    $add_table2->execute();
}
$add_table1->close();
$add_table2->close();
$mysqli->close();

表格应该是这样的

| 1 | Mark | mark@me.com |
| 2 | Sue  | sue@me.net |

|1 | English | perfect |
|1 | Spanish | awesome |
|2 | English | great |
|2 | French | ok |
|2 | Korean | fluent |

但是,我的代码表 1 看起来不错,但表 2 看起来像这样

| 1 |  |  |
| 2 |  |  |

有人可以帮忙吗?谢谢!

【问题讨论】:

  • 你为什么在这里使用mysql_real_escape_string?
  • 投票结束不是一个真正的问题。向人们寻求由于语法错误而永远无法运行的代码的帮助绝对没有意义。

标签: php mysql database mysqli prepared-statement


【解决方案1】:

我要指出的一件事是,您不要将 mysql_real_escape_string 与准备好的语句一起使用。

另一件事是$user-id 不是一个有效的变量名。不能使用连字符。

编辑:

打开错误报告并在任何失败时输出mysqli/mysqli_stmt::$error 是一件好事。大多数问题都可以通过这些解决。

【讨论】:

  • 你认为问题出在mysql_real_escape_string吗?我把它拿出来看看它是否有效。是的,$user-id 实际上只是 $userid;我在那里放了一个破折号以使其更具可读性(这很愚蠢:()
  • @nubicurio 之所以否决是因为您发布了一个名称无效的变量,但您在没有说明的情况下“澄清”了这个变量,并且因为建议您不要将 mysql_real_escape_string 与 MySQLi 结合使用准备好的语句?你这个答案实际上得到了一个很好的建议,我建议你听一下。
  • 让我看看我是否能找出如何输出我的 mysqli 错误...我不确定我知道您所说的“-1 for what,究竟”是什么意思...
  • 你的常识显然是个“常识”警察。为什么不告诉我真正的问题是什么,而不是仅仅投票给那些真正想提供帮助的人呢? @MichaelRushton 感谢您的建议;我没有投票给你,我认为是你的常识。
【解决方案2】:

您的 php mysqli 代码看起来不错。您确定您正在正确检索 POST 值吗?在执行查询之前 int foreach 循环打印 $language 和 $proficiency

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多