在非对象上调用成员函数 bind_param().mysqli
这是我的 php 代码:
include ("dbinfo.php");if(isset($_POST['editsave'])){$edittitle=$_POST["edittitle"];$editurl=$_POST["editurl"];$editdesc=$_POST["editdesc"];$editid=$_POST["editid"];$mysqli = $GLOBALS['dbc'];$stmt = $mysqli->prepare("更新链接 SET title = ?,描述 = ?哪里 id = ?");$stmt->bind_param('ssd',$_POST['edittitle'],$_POST['editdesc'],$_POST['editid']);$stmt->执行();$stmt->close();}
这是我的表格:
<form role="form" action="edit.php" method="post"><div class="form-group"><label for="title">标题</label><input type="hidden" name="editid" value="<?echo $id; ?>"><button type="submit" name="editsave" class="btn btn-primary">保存更改</button></div></表格>
当我按下提交时,我得到这个:
致命错误:在第 27 行的/storage/content/x/xxx/中的非对象上调用成员函数 bind_param().
第 27 行是:
$stmt->bind_param('ssd',
我不熟悉mysqli.我已经尝试解决这个问题几天了,但我快疯了.
解决方案这表示里面的查询 mysqli::prepare() 导致错误.
根据文档:
<块引用>mysqli_prepare() 返回一个语句对象,如果发生错误则返回 FALSE.
尝试正确转义 desc
,这是 MySQL 中的保留关键字( 不是正确转义):
$stmt = $mysqli->prepare('UPDATE links SET title = ?, `desc` = ? WHERE id = ?');
This is my php code:
include ("dbinfo.php");
if(isset($_POST['editsave'])){
$edittitle=$_POST["edittitle"];
$editurl=$_POST["editurl"];
$editdesc=$_POST["editdesc"];
$editid=$_POST["editid"];
$mysqli = $GLOBALS['dbc'];
$stmt = $mysqli->prepare("UPDATE links SET title = ?,
desc = ?
WHERE id = ?");
$stmt->bind_param('ssd',
$_POST['edittitle'],
$_POST['editdesc'],
$_POST['editid']);
$stmt->execute();
$stmt->close();
}
This is my form:
<form role="form" action="edit.php" method="post">
<div class="form-group">
<label for="title">Title</label>
<input type="text" name="edittitle" class="form-control" id="title" placeholder="Enter title" maxlength="70" value="<?php echo ($title); ?>">
</div>
<div class="form-group">
<label for="url">URL</label>
<input type="text" name="editurl" class="form-control" id="url" value="<?php echo ($url); ?>" disabled>
</div>
<div class="form-group">
<label for="desc">Description</label><small> (max 500 characters)</small>
<textarea class="form-control" name="editdesc" id="desc" rows="5" maxlength="500"><?php echo ($desc); ?></textarea>
</div>
<div>
<input type="hidden" name="editid" value="<? echo $id; ?>">
<button type="submit" name="editsave" class="btn btn-primary">Save changes</button>
</div>
</form>
When i press submit i get this:
Fatal error: Call to a member function bind_param() on a non-object in /storage/content/x/xxx/ on line 27.
Line 27 is:
$stmt->bind_param('ssd',
I'm not familiar with mysqli. I have tried to fix the problem for a few days now and I'm getting crazy.
解决方案This means that the query inside mysqli::prepare() resulted in an error.
According to the doc:
mysqli_prepare() returns a statement object or FALSE if an error occurred.
Try to properly escape desc
, which is a reserved keyword in MySQL ( is not proper escaping):
$stmt = $mysqli->prepare('UPDATE links SET title = ?, `desc` = ? WHERE id = ?');
相关文章