php:2个mysql查询,但只执行1个

时间:2017-09-18 15:26:51

标签: php mysql database

我在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();
  }

我做了什么:

  • 已检查数据库连接
  • 选中的表名
  • 一些错误检查
  • 尝试为sec查询创建不同的函数(但后来他 不再发送任何东西了)
  • 删除秒查询(但它仍然不会发送第一个查询)
  • 和ofc googling

我认为我的第一个查询出错了,但我不知道是什么。

发现它拼错了列名(是的,我确实检查了2次,但仍然没有看到它)。

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);

以下是类型规范字符:

  • ' i':对应的变量有类型整数
  • ' d':对应的变量有类型double
  • ' s:对应的变量有类型字符串
  • ' b':相应的变量是一个blob,将以数据包的形式发送

因此,我建议你的解决方案是:

$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是对值的引用数组,第一个元素是类型。