编辑!
一直在查看具有类似问题的帖子,但似乎找不到适用于我情况的答案 - 希望你们能提供帮助。
更新:根据输入更新了我的代码 - 谢谢!我看到了进步,但是:
现在,只有在while
循环中调用 INSERT INTO 时,我才会Call to a member function bind_param() on a non-object
错误。
$stmtTjekFindesOevelse、$stmtFindOevelsesID 和 $stmtGemNyVaegtOgRepsSet 本身工作正常(当在代码中手动输入变量时)只有在 while 循环内时$stmtGemNyVaegtOgRepsSet失败并显示上述错误消息。
$stmtFindOevelsesID将始终返回一个整数(id)。如果没有这样的 id,它将被if ($stmtTjekFindesOevelse->num_rows() > 0)
发现,并且代码不会运行。
猜 while-loop 有问题 - 只是不知道在这种情况下使用哪种替代方案......
$navn = 'Brystpres';
$vaegt = 10;
$reps = 11;
$antalGangeUdfoert = 11;
global $mysqli;
$stmtTjekFindesOevelse = $mysqli->prepare("SELECT * FROM oevelser WHERE navn=?");
$stmtTjekFindesOevelse->bind_param("s", $navn);
$stmtTjekFindesOevelse->execute();
$stmtTjekFindesOevelse->store_result();
if ($stmtTjekFindesOevelse->num_rows() > 0)
{
$stmtFindOevelsesID = $mysqli->prepare("SELECT id FROM oevelser WHERE navn=?");
$stmtFindOevelsesID->bind_param("s", $navn);
$stmtFindOevelsesID->execute();
$stmtFindOevelsesID->bind_result($oevelsesID);
while ($stmtFindOevelsesID->fetch()) {
$stmtGemNyVaegtOgRepsSet = $mysqli->prepare("INSERT INTO vaegtogreps (oevelsesreference, vaegt, reps, antalgangeudfoert) VALUES (?, ?, ?, ?)");
$stmtGemNyVaegtOgRepsSet->bind_param("idii", $oevelsesID, $vaegt, $reps, $antalGangeUdfoert);
$stmtGemNyVaegtOgRepsSet->execute();
}
}
您的列使用了错误的标识符。
('oevelsesreference', 'vaegt', 'reps', 'antalgangeudfoert')
通过删除引号
(oevelsesreference, vaegt, reps, antalgangeudfoert)
或在列名称周围使用反引号:
(`oevelsesreference`, `vaegt`, `reps`, `antalgangeudfoert`)
对查询使用错误检查会发出信号。
改变:
$stmtGemNyVaegtOgRepsSet->execute();
自:
if(!$stmtGemNyVaegtOgRepsSet->execute()){
trigger_error("There was an error....".$mysqli->error, E_USER_WARNING);
}
为了获得错误的原因。
编辑:
我相信我找到了对我有用的解决方案,它在"vaegtogreps"表中插入了以下内容。
Oevelsesreference vaegt reps antalgangeudfoert 1 10 11 11
您需要将store_result()
用于第二个选择。
只需向其添加$stmtFindOevelsesID->store_result();
:
$stmtFindOevelsesID = $mysqli->prepare("SELECT id FROM oevelser WHERE navn=?");
$stmtFindOevelsesID->bind_param("s", $navn);
$stmtFindOevelsesID->execute();
$stmtFindOevelsesID->bind_result($oevelsesID);
// added and working
$stmtFindOevelsesID->store_result();
问题是你的插入语句:
INSERT INTO vaegtogreps ('oevelsesreference', 'vaegt', 'reps', 'antalgangeudfoert')
^ ^ ^ ^ ^ ^ ^ ^
列的引号是反引号而不是单引号:
'列 1', '列 2'//反引号因此,要么
省略它们,要么使用反引号:
INSERT INTO vaegtogreps (`oevelsesreference`, `vaegt`, `reps`, `antalgangeudfoert`) VALUES (?, ?, ?, ?)
关于您得到的错误:Fatal error: Call to a member function bind_param() on a non-object
和Trying to get property of non-object
您似乎没有正确实例化您的 MySQLI 连接。
尝试这样做,如 PHP 文档中提到的:
$mysqli = new mysqli("dbhost", "dbuser", "dbpass", "dbname");
if (mysqli_connect_errno()) {
printf("Connect failed: %s'n", mysqli_connect_error());
exit();
}