【问题标题】:Inserting user updates into SQL with PHP使用 PHP 将用户更新插入 SQL
【发布时间】:2013-06-05 19:24:41
【问题描述】:

我想我现在真的很接近了 - 不再有带有错误的讨厌的橙色框 - 我现在可以看到的唯一问题是,一旦我更新了表格(在

$qry = "UPDATE 'members' ('employer', 'flat') WHERE login='$login_name' VALUES ". " ('$employ', $address')";

) 我收到消息"No rows updated" 回显到屏幕!

任何想法是什么问题? 谢谢。

<?php
    //Start session
    session_start();
    $_SESSION['SESS_LOGIN'];
    //Include database connection details
    require_once('config.php');

//Array to store validation errors
    $errmsg_arr = array();

    //Validation error flag
    $errflag = false;

    //Connect to mysql server
    $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
    if(!$link) {
        die('Failed to connect to server: ' . mysql_error());
    }

    //Select database
    $db = mysql_select_db(DB_DATABASE);
    if(!$db) {
        die("Unable to select database");
    }

    //Function to sanitize values received from the form. Prevents SQL injection
    function clean($str) {
        $str = @trim($str);
        if(get_magic_quotes_gpc()) {
            $str = stripslashes($str);
        }
        return mysql_real_escape_string($str);
    }

    //Sanitize the POST values
    $employ = clean($_POST['employer']);
    $address = clean($_POST['flat']);



?>



<?Php
//Insert employer and address into database row for logged in user.    
$login_name = $_POST['login_name'] ;
$qry = "UPDATE 'members' ('employer', 'flat') WHERE login='$login_name' VALUES ". "     ('$employ', $address')" ;



    $result = @mysql_query($link, $qry);
    //Check whether the query was successful or not
    if(!$result) {
        echo "No rows updated";
        exit();
    }else {
        echo "Success";
    }
?>

【问题讨论】:

  • mysql_* 函数不再支持,它们是 officially deprecated不再维护,将在 removed未来。您应该使用PDOMySQLi 更新您的代码,以确保您的项目在未来的功能
  • 只是为了抢占被贬值的 mysql* 函数的 cmets,他可以随意使用任何他想要的函数。请不要发布重复的cmets。
  • @imulsion 谢谢!这太烦人了。谁在乎他是否使用mysql_,这与问题完全无关。
  • 其他人已经说错了。作为提示:输出mysql_error() 代替“没有更新的行”以查看发生了什么。
  • 我可能错了,但问题出在...我如何使用 echo var_dump($qry); 将 $login_name 设置为 $_POST['login_name'];正在显示 $login_name 设置为 $_SESSION['SESS_LOGIN'] ...这应该显示为用户在登录配置文件时使用的实际登录名吗?我希望我终于走上了正轨!!感谢大家的帮助和建议!

标签: php sql insert


【解决方案1】:

不要使用VALUES,使用SET

"UPDATE `members` SET `employer` = '".$employ."', `flat` = '".$address."' WHERE `login`='".$login_name."'"

【讨论】:

  • 感谢您的帮助。刚试了你输入的imulsion,结果还是一样!
  • @Tom36 嗯。将编辑答案并尝试解决它:)
  • @Tom36 如果您想像 Telmo Marques 推荐的那样进行调试,您已经知道出了什么问题。
【解决方案2】:

首先,如果您正在寻找代码中的问题,则不应使用 @ 运算符来隐藏错误消息。此外,您使用了错误的括号(' 而不是 `)。您的其余代码看起来不错。也许你需要给我们一些关于数据库结构的信息,否则

【讨论】:

  • 数据库是code member_id、名、姓、登录名、密码、年龄、雇主、单位code 仍然没有显示任何错误
  • 光靠名字是没有用的。首先尝试删除他@ 并使用基本调试(如var_dump() 在每个重要步骤之后结合exit;)。如果这无助于告诉我们您的数据库表是如何设计的。我的意思是像 fieldtype 等等。
  • 我相信是这样的:$result = @mysql_query($link, $qry); //检查查询是否成功 if(!$result) { echo mysql_error();出口(); }else { echo "成功"; } ?>
  • 删除@ 并使用var_dump 而不是echo。这应该会为您提供所需的信息。
  • $result = mysql_query($link, $qry); //检查查询是否成功 if(!$result) { var_dump mysql_error($result);出口(); }else { echo "成功"; } ?>
猜你喜欢
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
  • 2019-06-11
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 2019-01-14
  • 1970-01-01
相关资源
最近更新 更多