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&;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
<?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 (?, ?, ?, ?, ?, ?)");