Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysqli update引发对成员函数bind_param()的调用错误_Php_Mysqli - Fatal编程技术网

Php Mysqli update引发对成员函数bind_param()的调用错误

Php Mysqli update引发对成员函数bind_param()的调用错误,php,mysqli,Php,Mysqli,我有一个70/80字段的表单,我需要将它插入到一个表中,所以我没有手动创建一个巨大的insert语句,而是首先在我的db中根据表单中输入的名称创建了一个表。下面是我用来创建/更改表的代码 function createTable($array, $memberMysqli) { foreach ($array as $key => $value) { //echo "<p>Key: ".$key." => Value: ".$value

我有一个70/80字段的表单,我需要将它插入到一个表中,所以我没有手动创建一个巨大的insert语句,而是首先在我的db中根据表单中输入的名称创建了一个表。下面是我用来创建/更改表的代码

function createTable($array, $memberMysqli)
{
   foreach ($array as $key => $value)
   {
            //echo "<p>Key: ".$key." => Value: ".$value . "</p>";
            $query = "ALTER TABLE questionnaire ADD ".$key."  text";

            if($stmt = $memberMysqli->prepare($query))
            {
                $success = $stmt->execute();
            }
   }
         echo "<h1>Array count: ". count($array) ."</h1>" ;
}

这会引发绑定参数错误,我不知道为什么。

O,让我们尝试一个规范的答案

调用成员函数
(或者
希望参数1是mysqli_结果,对于过程样式来说是布尔值)
本身并不是一个错误,而只是一些其他问题的症状。
这个错误消息意味着没有在应该创建的位置创建对象

因此-创建
$stmt
对象时出现问题。
很可能是查询有问题。 所以,我们需要追踪那个错误

除非明确要求,否则Mysqli不会告诉你发生了什么。因此,您必须始终检查与服务器交互的每个mysqli函数的结果,如果结果为FALSE,则检查
$mysqli->error

将mysqli错误消息转换为PHP错误也非常重要,以便根据站点范围的错误报告设置进行处理

如果您在整个应用程序代码中使用mysqli_query(),而没有将其封装到某个助手类中,
trigger_error()
是引发PHP错误的好方法,因为它还会告诉您发生错误的文件和行号

因此,所有的
prepare()
、execute()和
query()
调用都必须这样编写:

$stmt = $mysqli->prepare($query) or trigger_error($mysqli->error."[$query]");
还是程序化的

$res = mysqli_query($mysqli,$query) or trigger_error(mysqli_error($mysqli)."[$query]");
在所有脚本中
从那时起,您将被告知未创建对象的原因。 (如果您对这种
语法感到好奇,)
请注意,查询也包含在错误消息中,以便您可以直观地检查它并在另一个环境中进行测试

但是如果您将查询封装到某个类中,则文件和行from trigger error将毫无用处,因为它们将指向调用本身,而不是导致特定问题的应用程序代码。因此,在运行封装的mysqli命令时,必须使用另一种方法:

$result = $mysqli->query($sql);
if (!$result) {
    throw new Exception($mysqli->error." [$query]");
}
as Exception将为您提供一个堆栈跟踪,它将引导您找到调用错误查询的位置

请注意,您通常必须能够看到PHP错误。在一个实时站点上,你必须查看错误日志,因此,设置必须是

error_reporting(E_ALL);
ini_set('display_errors',0);
ini_set('log_errors',1);
在本地开发服务器上,可以在屏幕上出错:

error_reporting(E_ALL);
ini_set('display_errors',1);

当然,您永远不应该在语句前面使用错误抑制运算符(@)

谢谢!这是一段我应该知道的简便代码。问题是,当我修改表时,它创建了一个字段“submit”,这导致了更新上的问题。
error_reporting(E_ALL);
ini_set('display_errors',1);