gpt4 book ai didi

php - 无法通过php更新sql

转载 作者:太空宇宙 更新时间:2023-11-03 11:58:51 25 4
gpt4 key购买 nike

$settings = parse_ini_file("settings.ini");

$conn = new mysqli($settings[servername],$settings[username],$settings[password], $settings[dbname]);
$height = $_POST['heightFt'] * 12 + $_POST['heightIn'];
if($conn->connect_error)
{
die("Connection failed: " . $conn->connect_error);
}
if(isset($_COOKIE['user']))
{
list($currentFName, $currentLName) = explode(",", $_COOKIE['user']);

}
$newFName = $_POST['fName'];
$newLName = $_POST['lName'];
$newAge = $_POST['age'];
$newWeight = $_POST['weight'];
$newHeight = $_POST['height'];
$newSex = $_POST['sex'];
$sql = "update $settings[userTable] set fName = $newFName, lName = $newLName, age = $newAge, weight = $newWeight, height = $newHeight, sex = $newSex where fName = $currentFName and lName = $currentLName";
$retval = mysql_query($sql, $conn);
if(!$retval)
{
die("Could not update data: " . print_r($_POST) );
//die("Could not update data: " . mysql_error());
}
echo "successful update";

这不起作用,我不知道如何解决它。用它显示的代码Array ( [fName] => Test [lName] => Testing [age] => 25 [weight] => 199 [sex] => male [heightFt] => 5 [heightIn] => 7 ) Could not更新数据:1

//die("无法更新数据:". print_r($_POST) );
die("无法更新数据:".mysql_error());

显示

无法更新数据:

php 是否有任何显示错误的地方。通常当我的代码出现问题时,我只会看到一个白屏,必须通过反复试验来找出问题所在 Failed to load resource: the server responded with a status of 500 (Internal Server Error)

最佳答案

您混合了 mysqli 和 mysql 接口(interface)调用。那行不通

我们看到正在创建一个 mysqli 连接...

$conn = new mysqli(

但是我们看到调用了mysql_接口(interface)函数。

$retval = mysql_query(

不要那样做。那不行不行。使用 mysqli_ 函数。

所以,先解决这个问题。


为了调试 SQL,在将它提交到数据库之前回显 $sql。 (确保您发送的字符串是您要执行的 SQL 语句。)

此外,合并潜在的不安全值(例如来自 $_GET 或 $_POST 的变量值)会导致 SQL 注入(inject) 漏洞。合并到 SQL 语句文本中的值必须正确转义。请参阅 mysqli_real_escape_string。但这还不足以保证代码不会仍然容易受到 SQL 注入(inject)攻击。

更好的模式是使用准备好的语句绑定(bind)占位符


这是不对的。

如果 $newFNameFred 并且 $newLNameFlintstone

然后这个:

$sql = "update $settings[userTable] set fName = $newFName, lName = $newLName, ...";

或者您实际上可能需要这样做:

$sql = "update " . $settings[userTable] . " set fName = $newFName, lName = $newLName, ...";

评估为

 update mytable set fName = Fred, lName = Flintstone, ...

MySQL 对此犹豫不决,因为字符串文字应该用单引号引起来:

 update mytable set fName = 'Fred', lName = 'Flintstone', ...
^ ^ ^ ^

如果 $newLNameO'Reilly,MySQL 会犹豫,他会看到字符串文字 'O' 后跟一些东西MySQL 不明白...

 update mytable set fName = 'Fred', lName = 'O'Reilly', ...
^^^^^^

为了让它正确运行,我们需要用另一个单引号转义值中的单引号,因此我们的 SQL 语句如下所示:

 update mytable set fName = 'Fred', lName = 'O''Reilly', ...
^^

字符串文字中的两个单引号(被 MySQL)解释为一个单引号。将存储在列中的值(当然假设语句成功)将是我们想要的:O'Reilly

您可能会因为转义值而陷入困境,但是更好的模式是带有绑定(bind)占位符的准备语句...

 $sql = "update mytable set fName= ? ,lName = ?, ... ";

$stmt = $dbh->prepare($sql);
$stmt->bind_param("ss",$newFName,$newLName);
$stmt->execute();

引用:http://php.net/manual/en/mysqli-stmt.bind-param.php

关于php - 无法通过php更新sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30607776/

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