PHP& MySQLi插入查询失败

时间:2014-03-22 23:43:24

标签: php mysqli

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

2 个答案:

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