【问题标题】:My MySQL database is not updating?我的 MySQL 数据库没有更新?
【发布时间】:2014-04-19 20:45:24
【问题描述】:

我正在尝试从 php 存档更新我的数据库,但我不能: 在你问之前:来自 db 的名称写得正确,if 也有效......

<?php 

if(isset($_GET["ans"]) && isset($_GET["name"])) 
{ 


include("con.php"); 
$con = con(); 
$answer = $_GET["ans"]; 
$nam = $_GET["name"]; 

if($answer="firefly" ||$answer="Firefly" ||$answer="FIREFLY") 

{ 

$le=2; 
$sc=50; 

$update = "UPDATE User SET Level='$le', Score='$sc' where Name = '$nam'"; 
mysql_query($update,$con); 


// header("Location: lv1b.php?n=$nam"); 

} 

else { 
echo "try again..." ; 
} 


} 


?>*

这是con.php...

    <?php 
 function con() 
    {   $server="localhost";   $user="root";     $pass=""; 
    $con= mysql_connect($server, $user,$pass); 
    mysql_select_db("games");     return $con; 
    }

【问题讨论】:

  • 怎么不行?你得到什么错误?你做了什么来解决这个问题?您还对 SQL 注入和使用过时的 API 持开放态度。
  • 它不会在 MySQL 上更新等级和分数...
  • 你的 if 语句也有错误。
  • mysql_error() 说什么?
  • 能不能得到con();的包含内容

标签: php mysql


【解决方案1】:

您的if 语句当前正在分配值,而不是测试相等性,您也可以使用大小写转换函数之一跳过三个测试...所以if 行应该是:

if(strtolower($answer)=="firefly") {

接下来 - 正如 cmets 中所指出的 - 您正在使用过时的 MySQL 库,您应该使用 MySQLIPDO

此外,您对 SQL 注入持开放态度,您应该转义您在 MySQLi 中使用的任何值,请参阅mysqli_real_escape_string。在您的示例中,这意味着转义 $nam

的值

一个潜在的替代脚本片段(使用 MySQLi 和上述 if 语句更改)可能类似于:

<?php
$mysqli = new mysqli("localhost", /*username*/"root", /*pass*/"", /*dbname*/);

$name=$mysqli->real_escape_string($_GET["name"]);

if (strtolower($_GET["ans"])=="firefly") {
  if (!$mysqli->query("UPDATE user SET level='2',score='50' ".
                      "WHERE name='$name'")) {
    echo "query failed";
  } else {
    echo "Updated"
  }
  $mysqli->close();
} else {
  echo "try again..";
}

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    相关资源
    最近更新 更多