在我的SQL语法-PHP中找不到错误(请检查语法手册)?

时间:2018-06-26 20:30:08

标签: php mysql ajax html5 phpmyadmin

问题:

我正在尝试从数据库中的变量cash_amount中减去0.05,称为用户,并且我正在用ajax调用此文件,但没有任何反应。要解决此问题,我在浏览器中打开了文件,并出现以下错误:

错误:

您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的''附近使用

代码:

PHP:

sbt.IO

Javascript / AJAX:

<?php
session_start();

$servername = "localhost";
$username = "myUser";
$password = "myPass";
$dbname = "myDBname";
$cash_amount = $_SESSION['cash_amount'];

// Create connection

$userid = $_SESSION['id'];

// You must enter the user's id here. /\

$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Fetch the existing value of the cash_amount against that particular user here. You can use the SELECT cash_amount from users where userid = $userid
$_SESSION['cash_amount'] -= 0.05;
$newAmount = $cash_amount - 0.05;

$sql = "UPDATE users SET cash_amount = $newAmount WHERE id = $userid";
$result = $conn->query($sql);

if($result)
{
   echo "5 cents have been subtracted!";
}
else
{
   echo mysqli_error($conn);
   session_start();
   session_unset();
   session_destroy();
}

$conn->close();
?>

我的数据库:

我的表称为用户及其在数据库casball_accounts内部。

以下是格式:

id | first_name | last_name |电邮|密码现金金额|在4之间|哈希|活跃

结论:

我对为什么我的PHP代码无法正常工作感到非常困惑,我已经尝试搜索修复程序,但发现了“ SQL Injection”一词,但仍然没有找到错误。我在JS方面很高级,但对PHP还是新手,所以请耐心等待。谢谢!

4 个答案:

答案 0 :(得分:1)

您可以简化查询并执行

$sql = "UPDATE users SET cash_amount = cash_amount - 0.05 WHERE id = $userid";

但是为了避免SQL注入的可能性,我也建议更改代码以使用像这样的参数化和绑定查询

$sql = "UPDATE users SET cash_amount = cash_amount - 0.05 WHERE id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('s', $userid);
$result = $stmt->execute();

答案 1 :(得分:0)

您正在将数据插值到查询中,如果需要的话,可以使用Mostafa的答案,并在这些值附近加引号,以防它们格式错误。这也意味着您必须先检查它们是否为合法值,然后再将其放入查询中。

但是,它们也可能需要用户输入,因此请使用PDO的准备好的语句。

$sql = "UPDATE users SET cash_amount = :newAmount WHERE id = :userid";
$conn = $conn->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
$conn->execute([':newAmount' => $newAmount, ':userid' => $userid])

...应解决此问题。但是确保您拥有自己认为的东西可以防止很多红鲱鱼。

答案 2 :(得分:0)

语法错误抱怨''附近存在问题,这意味着在混淆之后没有任何东西。也就是说,在查询结束时会感到困惑。

如果$userid为空,则您的SQL查询将为

UPDATE users SET cash_amount = ... WHERE id =

这显然是错误的语法,因为=需要两个操作数。

您需要确保您的$userid具有非空白值。

其他答案中的建议尝试通过使用引号或查询参数来解决该问题,但真正的问题是在使用$userid之前,请不要检查其是否具有值。

答案 3 :(得分:-1)

替换

   $sql = "UPDATE users SET cash_amount = '$newAmount' WHERE id = '$userid'";

代替

$sql = "UPDATE users SET cash_amount = $newAmount WHERE id = $userid";