【问题标题】:Updating a mysql db with php ajax request使用 php ajax 请求更新 mysql 数据库
【发布时间】:2017-12-17 03:55:32
【问题描述】:

我有这个 php 代码,它根据 ajax 发送的 3 个变量更新我的 MySQL 数据库中的一行,但返回一个 http 500 错误

<?php
$dbname = 'xxxxxxxxxx';
$dbuser = 'xxxxxxxxxxxx';
$dbpass = 'xxxxxxxxxxxxx';
$dbhost = 'xxxxxxxxx';
$link = mysql_connect($dbhost, $dbuser, $dbpass) or die("Unable to Connect to '$dbhost'");
$db_selected = mysql_select_db($dbname, $link);
if (!$db_selected) {
    die ('Can\'t use foo : ' . mysql_error());
}

$topparent = $_POST['name']; 
$column = $_POST['column']; 
$value = $_POST['value']; 

$sql = "UPDATE reloaded SET" . $column . " = '" .$value . "'WHERE top_parent = '" . $name ."';

$retval = mysql_query( $sql, $link );
         if(! $retval ) {
            die('Could not create table: ' . mysql_error());
         }
         echo "success\n";
         mysql_close($link);
?>

我的 jquery js 就是这个。变量正确传递(尝试使用警报):

function updatedb(a,b,c){
    $.ajax({
       url: "updatedb.php",
       type: 'POST',
       data: ({name:a,column:b,value:c}),
       success: function(msg) {
          alert('DB updated');
       }               
    });
};

知道为什么它会返回错误吗?我花了一些时间检查代码,尝试了不同的变体,但似乎无法弄清楚。

【问题讨论】:

  • 在你的成功函数中,写console.log(msg)
  • (1) 您在$sql 中缺少报价。 (2) $sql 中有语法问题,因为 SET 后面没有空格。 (3) 你对sql注入很开放。您应该将您的列列入白名单并清理您的数据stackoverflow.com/questions/60174/…
  • 您使用的是哪个版本的 PHP?,mysql_* 自 PHP 7 起已被弃用
  • @Sean 那篇关于注射的帖子对我来说有点复杂,还有很多东西要学。仅添加一个 if 语句检查一组固定值是否足以保护数据库?

标签: javascript php jquery mysql ajax


【解决方案1】:

SQL 查询语句中存在 PHP 语法错误。

您错过了结束 " 并因此出现 500 错误。

更正后的代码

$sql = "UPDATE reloaded SET " . $column . " = '" .$value . "' WHERE top_parent = '" . $name ."'";

编辑

除此之外,SET 关键字后面没有空格。

修复此问题将正确更新您的数据库。

【讨论】:

  • 还有一个语法问题,除了对sql注入开放之外
  • 啊...是的我现在看到了,它现在成功执行了,即使它似乎还没有更新数据库,但这是另一个问题。
  • @Sean 是的,你是对的,在 SET 之后添加了空格。无论如何都不会抛出 500 错误。
  • @RamC 不,它不会导致 500 错误,但会影响 OP 所说的在 this comment 中没有发生的数据库更新
  • 是的肖恩,@cmplieger 我已经编辑了答案,数据库更新应该现在发生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-11
  • 2015-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多