我正在创建一个带有按钮的Web应用程序库,单击该按钮会调用checkout()函数。此函数使用jQuery将数据发布到PHP脚本。然后,这个PHP连接到localhost上的数据库(现在)并发送查询。
在MySQL Workbench中执行时,下面的PHP中显示的查询工作正常。当我尝试从网页上执行它时,我的问题出现了。它与db用户和密码连接得很好,但查询本身也失败了。
HTML
<div class="col-xs-4 btn btn-default button" onclick="checkout();">
Checkout
</div>
JS
function checkout() {
let result=$.ajax({
type: "POST",
url: "php/checkout.php",
dataType: "text",
//@TODO: add scanner functionality to populate isbn,
// add functionality to populate user
data:
{
isbn: 1,
user: 1
},
success: function(result) {
//change #button-text to house result (for now)
// @TODO: delete errorcheck when done
$('#button-text').html(result);
console.log(result);
},
error: function(xhr, status, error) {
alert(status + ' ||| ' + error);
}
});
}
PHP
$dbconn = connectToDB($serverName, $dbName, $dbUser, $dbPass);
// set is_available to false, update checkout and due
// date, update current owner of book, set due_date to
// current date + 14 days
$query = "UPDATE books
SET is_available = false,
checkout_date = CURDATE(),
due_date = DATE_ADD(CURDATE(),
INTERVAL 14 DAY)
WHERE isbn = $isbn;
INSERT INTO currently_checked_out_books
(user_id, book_isbn, due_date)
VALUES (
$user,
$isbn,
DATE_ADD(CURDATE(), INTERVAL 14 DAY)
);";
// $query = "show tables;"; // returns what you'd expect
$result = $dbconn->query($query);
我尝试过的事情:
我对我的查询和数据库权限进行了双重和三重检查 - 我设置的数据库用户具有数据库管理员权限,这意味着它应该能够对数据库执行任何操作。如前所述,我还在MySQL Workbench中直接测试了我的查询,并且它运行正常。我唯一能想到的是我的数据库用户设置不正确,但如果它有任何太多自由的话。
根据要求提供的其他信息和说明 - 如果我错过了任何重要的信息,请告知我们。
答案 0 :(得分:2)
我认为您的问题是您在$query
中有多个语句,但是您使用的$dbconn->query($query)
不支持多个语句,如official documentation中所述:
必须执行多个语句或多个查询 mysqli_multi_query()。声明的个别陈述 字符串用分号分隔。然后,返回所有结果集 必须提取已执行的语句。
因此,您需要拆分语句或保留$query
,并使用$result = $dbconn->multi_query($query);
。