繁体   English   中英

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

[英]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();
  }

我做了什么:

  • 检查数据库连接
  • 检查表名称
  • 一些错误检查
  • 试图为sec查询创建其他功能(但随后他不再发送任何内容)
  • 删除第二个查询(但仍不会发送第一个查询)
  • 和官方谷歌搜索

我想我的第一个查询做错了什么,但我不知道是什么。


发现它拼写错误的列名称(是的,我确实对其进行了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);

以下是类型说明字符:

  • '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();

不应以将bind_param用于mysqli的方式使用它:

mysqli_stmt_bind_param文档

第一个参数向PHP提示您正在处理什么类型的变量( i =>整数, s =>字符串等)。

基本上,您必须使用VARIABLES(不能使用常量)在一行中提供所有参数。

---旁注:高级-

如果您的代码不知道在编译时要传递多少个参数,则可能需要使用:

call_user_func_array(array($query,'bind_param'), $all_prm );

其中$all_prm是对值的引用数组,第一个元素是类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM