I'm making a web-application library with a button that, when clicked, calls a checkout() function. This function uses jQuery to post data to a PHP script. this PHP then connects to a database on localhost (for now) and sends a query.
When executed inside MySQL Workbench, the query shown in the PHP below works perfectly. My problem arises when I try to execute it from the web page. It connects just fine with the db user and password, but the query itself fails.
The HTML
<div class="col-xs-4 btn btn-default button" onclick="checkout();">
Checkout
</div>
The 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);
}
});
}
The 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);
What I've Tried:
I double and triple checked my query and my database permissions - the db user I have setup has DB Manager privileges, meaning it should be able to do whatever it wants with the database. As previously stated, I also tested my query directly in MySQL Workbench, and it worked properly. The only thing I can think of is that my db user isn't setup properly, but again, if anything it has too much freedom.
Additional information and clarification provided upon request - if I missed any important needed info, please let me know.