我在php中有一个类需要将数据从表单发送到数据库。查询分为2个查询bcs,一半数据需要发送到同一数据库中的另一个表。
现在问题:当我确认表单时,只有sec查询的数据已经发送到数据库而不是第一个查询的数据。
这就是我所拥有的:
(数据库连接)......
if (something is empty)
{
Give error.
}
else {
$query = $this->db->prepare("INSERT INTO Table1(coloumn1, coloumn2, coloumn3, coloumn4, coloumn5, coloumn6, coloumn7, coloumn8) VALUES(?, ?, ?, ?, ?, ?, ?, ?)");
$query->bindParam(1, $Val1);
$query->bindParam(2, $Val2);
$query->bindParam(3, $Val3);
$query->bindParam(4, $Val4);
$query->bindParam(5, $Val5);
$query->bindParam(6, $Val6);
$query->bindParam(7, $Val7);
$query->bindParam(8, $Val8);
$query->execute();
$query = $this->db->prepare("INSERT INTO Table2(coloumn1, coloumn2, coloumn3, coloumn4, coloumn5) VALUES(?, ?, ?, ?, ?)");
$query->bindParam(1, $Val1);
$query->bindParam(2, $Val9);
$query->bindParam(3, $Val10);
$query->bindParam(4, $Val11);
$query->bindParam(5, $Val12);
$query->execute();
}
我做了什么:
我认为我的第一个查询出错了,但我不知道是什么。
发现它拼错了列名(是的,我确实检查了2次,但仍然没有看到它)。
答案 0 :(得分:0)
我相信你以错误的方式使用了bind_param方法。如http://php.net/manual/en/mysqli-stmt.bind-param.php中所述:
bool mysqli_stmt::bind_param ( string $types , mixed &$var1 [, mixed &$... ] )
因此,假设您的所有变量都是整数,您可以通过以下方式绑定它们:
$query->bind_param('iiiiiiii', $Val1, $Val2, $Val3, $Val4, $Val5, $Val6, $Val7, $Val8);
以下是类型规范字符:
因此,我建议你的解决方案是:
$query = $this->db->prepare("INSERT INTO Table1(coloumn1, coloumn2, coloumn3, coloumn4, coloumn5, coloumn6, coloumn7, coloumn8) VALUES(?, ?, ?, ?, ?, ?, ?, ?)");
$query->bind_param('iiiiiiii', $Val1, $Val2, $Val3, $Val4, $Val5, $Val6, $Val7, $Val8);
$query->execute();
$query = $this->db->prepare("INSERT INTO Table2(coloumn1, coloumn2, coloumn3, coloumn4, coloumn5) VALUES(?, ?, ?, ?, ?)");
$query->bind_param('iiiii', $Val1, $Val9, $Val10, $Val11, $Val12);
$query->execute();
答案 1 :(得分:0)
bind_param
不应该像你对mysqli一样使用它的方式:
mysqli_stmt_bind_param documentation
第一个参数是PHP提示您正在处理的变量类型(i
=>整数,s
=>字符串等)。
你基本上必须使用VARIABLES在一行中提供所有参数(你不能使用常量)。
---侧面注意:高级---
如果您的代码不知道在编译时要传递多少参数,则可能需要使用:
call_user_func_array(array($query,'bind_param'), $all_prm );
其中$all_prm
是对值的引用数组,第一个元素是类型。