运行以下命令时遇到问题:
$stmt = $this->db->prepare("INSERT INTO checked_in (attendee_id) VALUES (?)");
$stmt->bind_param("i", $id);
$stmt->execute();
$stmt->close();
这是较大页面的一部分,但这是不起作用的部分。我首先从SQL数据库中提取$ id,因此我知道我有连接。我似乎无法让这个更新部分工作。
mysql > CREATE TABLE checked_in (
id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
attendee_id int NOT NULL,
check_in_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
这是我用来构建表的代码。难道我做错了什么?我认为我的问题是它可以与数据库通信,但我不知道我是否设置了表错误的地方,期望手动输入id和时间戳。如果我在我的sql提示符并使用此命令
,它可以工作mysql> INSERT INTO checked_in (attendee_id) VALUES (1);
这是程序的主要部分(在使教程适应我自己的过程中):
function checkIn() {
// Check for required parameters
if (isset($_POST["phone"])) {
// Put parameters into local variables
$phone = $_POST['phone'];
// Look up code in database
$user_id = 0;
$stmt = $this->db->prepare('SELECT id, first, last, email FROM attendees WHERE phone=?');
$stmt->bind_param("s", $phone);
$stmt->execute();
$stmt->bind_result($id, $first, $last, $email);
while ($stmt->fetch()) {
break;
}
$stmt->close();
// Bail if number doesn't exist
if ($id <= 0) {
sendResponse(400, 'Invalid number');
return false;
}
// Check to see if this device already redeemed
$stmt = $this->db->prepare('SELECT id FROM checked_in WHERE attendee_id=?');
$stmt->bind_param("i", $id);
$stmt->execute();
$stmt->bind_result($checkedInID);
while ($stmt->fetch()) {
break;
}
$stmt->close();
// Bail if number already checked in
if ($checkedInID > 0) {
sendResponse(403, 'Number already checked in');
return false;
}
// Add tracking of redemption
$stmt = $this->db->prepare("INSERT INTO checked_in (attendee_id) VALUES (?)");
$stmt->bind_param("i", $id);
$stmt->execute();
// Return unlock code, encoded with JSON
$result = array(
"checked_in" => "true",
);
sendResponse(200, json_encode($result));
return true;
}
sendResponse(400, 'Invalid request');
return false;
}
}
好的,所以我检查了我的apache错误日志,这就是它的含义:
[Fri Jul 25 15:06:41.996107 2014] [:error] [pid 16824] [client 127.0.0.1:52699] PHP Notice: Undefined variable: db in /var/www/html/index.php on line 129
[Fri Jul 25 15:06:41.996171 2014] [:error] [pid 16824] [client 127.0.0.1:52699] PHP Fatal error: Call to a member function prepare() on a non-object in /var/www/html/index.php on line 129
答案 0 :(得分:4)
如果在查询中使用问号时绑定参数,则不应使用i
作为参数。改为使用数字参数。
尝试
$stmt->bind_param(1, $id);
来自他们manual:
对于使用命名占位符的预准备语句,这将是一个 表单
:name
的参数名称。对于准备好的声明使用 问号占位符,这将是1的索引位置 参数。
那就是说,请描述在此功能中分配$id
的内容。
答案 1 :(得分:0)
试试这个:
$stmt = $this->db->prepare("INSERT INTO checked_in (attendee_id) VALUES (?)");
$stmt->execute( array( $id ) );
应该有用。
如果你想检查错误,你应该这样做:
$stmt = $this->db->prepare("INSERT INTO checked_in (attendee_id) VALUES (?)");
$check = $stmt->execute( array( $id ) );
if ( $check ) {
echo 'Nice work!';
} else {
$error = $stmt->errorInfo();
echo $error[2];
}