[英]php: 2 mysql queries but only 1 is executed
我在php中有一个需要将数据从表单发送到数据库的类。 该查询被分为2个查询,而一半的数据需要发送到同一数据库中的另一个表。
现在的问题是:当我确认表单时,只有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次检查,但仍然没有看到)。
我相信您以错误的方式使用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();
不应以将bind_param
用于mysqli的方式使用它:
第一个参数向PHP提示您正在处理什么类型的变量( i
=>整数, s
=>字符串等)。
基本上,您必须使用VARIABLES(不能使用常量)在一行中提供所有参数。
---旁注:高级-
如果您的代码不知道在编译时要传递多少个参数,则可能需要使用:
call_user_func_array(array($query,'bind_param'), $all_prm );
其中$all_prm
是对值的引用数组,第一个元素是类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.