gpt4 book ai didi

php - 为什么我的 SQL 查询不起作用

转载 作者:行者123 更新时间:2023-11-29 20:46:23 26 4
gpt4 key购买 nike

我的 SQL 查询不起作用(带有“UPDATE...”的查询)MySQL 不会返回任何错误,并且 UPDATE 查询不会更新任何内容。

这是我的代码:

<?php
print_r($_POST);
try
{
$bdd = new PDO('mysql:host=localhost;dbname=perso;charset=utf8', 'root', 'root');
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
$query = "SELECT * FROM money WHERE name='" . $_GET['name'] . "'";
foreach($bdd->query($query) as $val)
{
$name = $val['name'];
$balance = $val['balance'];
}
$balance = $balance + $_POST['money'];
echo $balance;
$query = "UPDATE money SET balance = " . $balance . " WHERE name = '" . $_GET['name'] . "'";
echo $query;
?>

最佳答案

原因是因为你没有执行你的语句,将这一行添加到你的代码中,你应该很好......

$bdd->query($query);

但是,这是一种非常糟糕的做法,您很容易受到 SQL 注入(inject)攻击,因为您没有准备(转义)字符串。最好的方法是使用参数,然后将它们绑定(bind)到准备好的语句,就像这样......

设置您的查询,保留来自用户的数据,因此 = 之后的任何内容都应替换为 ?,如下所示

$query = "SELECT * FROM money WHERE name=?";

另外,不要在问号两边加引号,当您绑定(bind)参数时,PDO 会自动执行此操作。

接下来,您需要准备您的陈述,如下所示......

$preparedStatement = $bdd->prepare($query);

然后您可以将参数绑定(bind)到语句。如果你只有一个,在你的情况下,你只需这样做......

$preparedStatement->bindParam(1, $_GET['name']); //This is binding $_GET['name'] to the first question mark in the query, which is after name=.

如果您要绑定(bind)多个参数,只需将 1 替换为问号的位置,然后对您拥有的参数数量重复相同的过程。

如果您有很多参数,您还可以使用迭代和数组(使用 for 和 foreach 循环),以节省编写一行又一行的代码。

希望这有帮助!

编辑

如果您实现了我建议的所有内容,您的新代码将如下所示...

<?php
print_r($_POST);
try{
$bdd = new PDO('mysql:host=localhost;dbname=perso;charset=utf8', 'root', 'root');
}
catch (Exception $e){
die('Erreur : ' . $e->getMessage());
}

$query = "SELECT * FROM `money` WHERE `name`=?"; //Replacing the concatenation with parameters.
$pStatement = $bdd->prepare($query); //Preparing your statement. This closes your vulnrability to attack.
$pStatement->bindParam(1, $_GET['name']); //Binding $_GET['name']
$pStatement->execute(); //Execute the statement.

foreach($pStatement->fetchAll(PDO::FETCH_ASSOC) as $val){ //Fetching all from the executed statement as an associative array.
$name = $val['name'];
$balance = $val['balance'];
}

$balance = $balance + $_POST['money'];
echo $balance;
$query = "UPDATE money SET balance = " . $balance . " WHERE name = '" . $_GET['name'] . "'";
echo $query;
?>

关于php - 为什么我的 SQL 查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38413724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com