首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在我的SQL语法中找不到错误- PHP (检查手册中的语法?)

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

Stack Overflow用户
提问于 2018-06-27 04:30:08
回答 4查看 71关注 0票数 0

问题是:

我正在尝试从名为users的数据库中的变量cash_amount中减去0.05,我通过ajax调用了这个文件,但是什么也没有发生。为了解决这个问题,我在浏览器中打开了这个文件,得到了这个错误:

错误:

您的SQL语法中有一个错误;请查看与您的MySQL服务器版本对应的手册,以了解要在第1行附近使用的正确语法

代码:

PHP:

代码语言:javascript
复制
<?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();
?>

Javascript/AJAX:

代码语言:javascript
复制
function countdownEnded() {
    //make serverscreen dissapear
        document.getElementById('serverScreenWrapper').style.display = 'none';
        document.getElementById('serverScreenWrapper').style.opacity = '0';
        document.getElementById("cashOutNumTwo").style.right = '150%';
        document.getElementById("cashOutNumOne").style.right = '150%';
//start Timer
        setInterval(gameTimer.update, 1000);
//make player move again
        socket.emit('4');
        socket.emit('6');
//make game appear
        document.getElementById('gameAreaWrapper').style.opacity = 1;
//play sound
        document.getElementById('spawn_cell').play();
//cut 5 cents from account - php function
        $.ajax({
        type: "POST",
        url: 'http://cashballz.net/game/5game/subtract5.php',
        data: { },
        success: function (data) {
            alert(data);
        }
    });
}

我的数据库:

我的表名为users,它位于DB casball_accounts中。

格式如下:

id | first_name | last_name |电子邮件|密码| cash_amount |4,介于| hash | active

结论:

我很困惑为什么我的php代码不能工作,我已经尝试搜索一个修复程序,我找到了"SQL注入“,但我仍然没有找到错误。我在JS很高级,但PHP是一个初学者,所以请容忍我。谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-06-27 07:15:06

您可以简化查询并执行以下操作

代码语言:javascript
复制
$sql = "UPDATE users SET cash_amount = cash_amount - 0.05 WHERE id = $userid";

但为了避免SQL注入的可能性,我还建议将代码更改为使用参数化和绑定查询,如下所示

代码语言:javascript
复制
$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
EN

Stack Overflow用户

发布于 2018-06-27 04:52:15

您正在将数据插入到查询中,如果这是您想要的,那么您可以使用Mostafa的答案,并在这些值两边加上引号,以防它们格式错误。这也意味着在将它们放入查询之前,您必须检查它们是否为合法的值。

但是,它们也可能会受到用户输入的影响,所以一定要使用PDO的预准备语句。

代码语言:javascript
复制
$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])

...should会处理这个问题。但是,确保你拥有你认为你拥有的东西,可以防止许多转移注意力的事情。

票数 0
EN

Stack Overflow用户

发布于 2018-06-27 05:00:39

语法错误报告''附近有一个问题,这意味着没有任何东西跟随它被混淆的点。也就是说,它在查询的末尾被混淆了。

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

代码语言:javascript
复制
UPDATE users SET cash_amount = ... WHERE id =

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

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

其他答案中的建议试图通过使用引号或查询参数来解决这个问题,但真正的问题是您在使用$userid之前没有检查它是否有值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51050950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档