我对MySQLi查询有一些问题。我已经多次阅读了PHP的文档并遇到了同样的错误。我是MySQLi的新手但是使用过MySQL。
以下是我在提交发布数据后收到的错误:
[2014年3月22日23:41:17 UTC] PHP致命错误:在第32行/home/ponypwna/public_html/Changelist/cpanel.php中的非对象上调用成员函数bind_param()< / p>
以下是我的概述代码:
<?php
$MysqlUsername = "*****";
$MysqlPassword = "*****";
$MysqlHostname = "localhost";
$MysqlDatabase = "ponypwna_mane";
/* Establishing Connection here */
$mysqli = new mysqli($MysqlHostname, $MysqlUsername, $MysqlPassword, $MysqlDatabase) or die("Mysql Error: " . $mysqli->error);
//Did we post it?
if (isset($_POST['insertChange'])) {
#Fetching Post Data
$change = $_POST['change'];
$state = $_POST['state'];
$appliesto = $_POST['appliesto'];
$progress = $_POST['progress'];
$completiondate = $_POST['completiondate'];
$contributor = $_POST['contributor'];
#Preparing Query
$insertChange = $mysqli->prepare("INSERT INTO changelist (change, state, appliesto, progress, completiondate, contributor) VALUES (?, ?, ?, ?, ?, ?)");
$insertChange->bind_param('sssiss', $change, $state, $appliesto, $progress, $completiondate, $contributor);
#Executing Prepared Query
$insertChange->execute();
#Close statement and function
$insertChange->close();
}
?>
答案 0 :(得分:0)
新答案
似乎错误是由于sql语法中的错误引起的。
当你这样做时:
$insertChange = $mysqli->prepare("INSERT INTO changelist (change, state, appliesto, progress, completiondate, contributor) VALUES (?, ?, ?, ?, ?, ?)");
如果语法中出现错误,$insertChange
设置为false,因此根据documentation here
bind_param()
的方法
返回值
mysqli_prepare()返回一个语句对象,如果发生错误则返回FALSE。
<小时/> 因此,修复方法是将sql复制到phpMyAdmin或其他任何内容,并用实际数据替换
?
并运行它以查看它是否有效。可能有一个列缺失,拼写错误?
答案 1 :(得分:0)
我们都很蠢:)
第二次看,我似乎从MySQL收到此错误 (在添加了一些调试工具后,我能够看到这个错误):你 您的SQL语法有错误;检查对应的手册 您的MySQL服务器版本,以便使用接近&#39;更改的正确语法, state,appliesto,progress,completiondate,contributor)VALUES(?,?, ?&#39;在第1行
&#34;变更&#34;是MYSQL中的保留关键字。 https://dev.mysql.com/doc/refman/5.5/en/reserved-words.html
添加``arround change(包装每个列名是个好主意 - 有各种保留关键字):
$insertChange = $mysqli->prepare("INSERT INTO changelist (`change`, state, appliesto, progress, completiondate, contributor) VALUES (?, ?, ?, ?, ?, ?)");