PHP&;MySQLi插入查询失败

PHP&;MySQLi插入查询失败,php,mysqli,Php,Mysqli,我对MySQLi查询有一些问题。我已经阅读了几次PHP文档,遇到了相同的错误。我对MySQLi还不熟悉,但已经使用过MySQL 以下是我在提交post数据后收到的错误: [22-Mar-2014 23:41:17 UTC]PHP致命错误:在第32行的/home/ponypwna/public_html/Changelist/cpanel.PHP中对非对象调用成员函数bind_param() 以下是我的概述代码: <?php $MysqlUsername = "*****"; $MysqlP

我对MySQLi查询有一些问题。我已经阅读了几次PHP文档,遇到了相同的错误。我对MySQLi还不熟悉,但已经使用过MySQL

以下是我在提交post数据后收到的错误:

[22-Mar-2014 23:41:17 UTC]PHP致命错误:在第32行的/home/ponypwna/public_html/Changelist/cpanel.PHP中对非对象调用成员函数bind_param()

以下是我的概述代码:

<?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();
}
?>

新答案
错误似乎是由sql语法中的错误引起的

当您这样做时:

$insertChange = $mysqli->prepare("INSERT INTO changelist (change, state, appliesto, progress, completiondate, contributor) VALUES (?, ?, ?, ?, ?, ?)");
当语法中出现错误时,
$insertChange
被设置为false,因此根据

返回值
mysqli_prepare()返回语句对象,如果发生错误,则返回FALSE


因此,修复方法是将sql复制到phpMyAdmin或其他任何地方,并用实际数据替换
,然后运行它以查看它是否有效。也许你的某一列丢失了,拼写错误?

我们都是哑巴:)

再看一眼,我似乎从MySQL收到了这个错误 (添加了一些调试工具后,我看到了这个错误):您 SQL语法有错误;检查相应的手册 您的MySQL服务器版本,以便使用正确的语法“更改”, 状态、应用对象、进度、完成日期、参与者)值(?, ?在1号线

“change”是MYSQL中的保留关键字

添加``arround change(最好包装每个列名-有各种保留关键字):


您没有在我能看到的任何地方设置
$mysqli
$mysqli
变量是否初始化过?@barell我已经设置了它,但出于安全原因,我没有在帖子中包含它。请将它添加到代码中,但不要包含您的密码。您的代码
$insertChange-close()还有另一个拼写错误;
应该有
->
而不是
-
错误消息意味着
$mysqli
没有初始化,或者初始化失败。请检查打开连接的代码,并确保进行了一些错误检查,这将告诉您注释发生了什么:他已实例化mysqli,只是没有包含在代码中。所以剩下的(正确)你的部分答案只是我的一个副本:P@Krimson我实际上添加了定义,但如果你读了这篇文章。我解释说,我没有添加它是出于安全原因。我添加了代码是为了那些通过定义的人。@dognose对不起,但是当我键入我的答案时,他没有mysqli入门…请检查编辑的部分以了解你的答案赛尔夫。不,我没有在最后一部分抄袭你的答案。这是我自己注意到的。请停止假设。只有当答案没有帮助时,才投否决票。当你感到竞争激烈和vulnerable@Krimson当前位置在你提交帖子前3分钟,他在评论中提到。我不觉得有竞争力。我只是厌倦了抄袭/粘贴g现有答案和/或评论,以获得“+1”。但是,如果您编辑您的帖子,我将删除“-1”。如果没有另一次编辑就不行。@dognose他可能没有看到,但谢谢你的两个答案。他们都很有帮助。谢谢你!我不敢相信我犯了这个错误。@LordNature不客气。@LordNature至少,现在我知道了,为什么我的同事在工作中有
t\U表
c\U列
:P
$insertChange = $mysqli->prepare("INSERT INTO changelist (`change`, state, appliesto, progress, completiondate, contributor) VALUES (?, ?, ?, ?, ?, ?)");