我有一个70/80字段表单,需要将其插入表中,因此与其手动创建一个巨大的insert语句,不如我首先从db表单中的输入名称在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>" ;
}
这可以正常工作,并且完全按照我的需要更改了表格。现在,要插入表单值以执行此操作,我执行了一个基本的字段插入操作,以存储行的ID,然后循环所有更新该行的发布变量。这是我的代码:
$stmt = $memberMysqli->prepare("INSERT INTO questionnaire(userid) VALUES (?)");
$stmt->bind_param('s', $_POST['userid']);
$stmt->execute();
$rowid = $stmt->insert_id;
$stmt->close();
$memberMysqli->autocommit(FALSE);
function updateColumn($memberMysqli, $query, $uid, $value)
{
if ($value)
{
$stmt = $memberMysqli->prepare($query);
//Throws bind param error here
$stmt->bind_param("ss", $value, $uid);
$stmt->execute();
}
}
function loopInputs($array, $memberMysqli, $rowid)
{
foreach ($array as $key => $formvalue)
{
var_dump($key);
updateColumn($memberMysqli, "UPDATE questionnaire SET $key = ? WHERE id = ?", $rowid, $formvalue);
}
}
loopInputs($_POST, $memberMysqli, $rowid);
$memberMysqli->commit();
$memberMysqli->close();
这引发了绑定参数错误,我不知道为什么。
哦,让我们尝试一个规范的答案。
Call to a member function
(或expects parameter 1 to be mysqli_result, boolean given
针对程序样式)本身并不是错误,而仅仅是其他一些问题的 症状 。
这个非常错误的消息意味着没有应在任何位置创建对象。
所以-创建$stmt
对象存在问题。
最有可能是查询问题。因此,我们需要跟踪该错误。
除非明确询问,否则Mysqli不会告诉您发生了什么。因此,您必须始终检查与服务器交互的每个mysqli函数的结果,如果结果为FALSE-check
$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]");
在所有脚本中 ,此后将通知您未创建对象的原因。(如果您对此or
语法感到好奇。请注意,错误消息中还包含查询,以便您直观地检查它并在其他环境中进行测试。
但是
,如果将查询封装到某个类中,则触发错误的文件和行将非常无用,因为它们将指向调用本身,而不是引起某些问题的应用程序代码。因此,当运行封装的mysqli命令时,必须使用另一种方式:
$result = $mysqli->query($sql);
if (!$result) {
throw new Exception($mysqli->error." [$query]");
}
因为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);
当然,绝对不要在语句前使用错误抑制运算符(@)。
这是我代码的一部分 我得到一个错误致命错误:对$stmt行上的非对象调用成员函数bind_param()-
我得到一个错误与此文本:(对不起,我的英语不好,我来自德国!) 错误:
我一直被这个错误困扰,请帮助我这是我的PHP代码致命错误:调用成员函数bind_param()
问题内容: 我是mysqli的新手,并开始尝试学习基本知识。关于这个示例(http://php.net/manual/en/mysqli-result.fetch- array.php ),我正在尝试fetch_array。这是我的代码。 在这里,我收到此错误,调用while条件行旁边的非对象上的成员函数fetch_array()。我尝试使用Google搜索,但没有得到解决我的问题的结果。希望我的
我尝试了一些代码来使用PHP和slim框架构建RESTful API Web服务。(我正在使用高级Rest客户端测试此代码) 这是我的密码。
问题内容: 我正在尝试在此准备好的语句中绑定变量,但我一直收到错误: 调用该函数,并将变量传递给它。当我更改函数以仅回显变量时,该变量会在页面上正常打印,但是如果我尝试在此处绑定它,则会收到错误。有人可以帮忙吗? 我知道函数没有完全写在这里,但这不应该是一个问题。我不明白为什么我会收到此错误。 问题答案: 正如错误消息所说,这似乎不是一个对象。尝试在您的prepare- call之后使用来调试它。