已更新:[MySQL 不会在 Where 条件 PHP 中更新]


UPDATED:[MySQL won't update in Where condition PHP]

我刚刚更新了这个问题。每当我将变量$ecode放在 WHERE 条件下时,我似乎无法更新我的数据库。但是当我回显这个变量时,它总是回显它的正确值。

<?php
    require 'sqlicon.php';
    $q=$_GET['q'];
    $ecode= $_GET['ecode'];
    echo"".$ecode;
    $result=$db->query("UPDATE offset_form SET Approved='".$q."' WHERE Employee_Code='".$ecode."'");
?>

这是SQLicon的内容.php:

<?php
    $db=new mysqli('localhost','root','',dbuser'); //localhost,username,password, dbname
?>

这是我获得$q和$ecode日期的地方:抱歉,如果它还没有在mysqli中。

testingjava.php:

<html>
<title> Offset Requests </title>
<head><link rel="stylesheet" type="text/css" href="up.css"/></head>
<script>
    function Approval() {
        var name;
        name=document.getElementById('ename').textContent;
        if(document.form1.approval[0].checked   true) { 
            alert(name);
            window.location.href = "sqli.php?q=Yes"  + "&ecode=" + name;
        }
    }
</script>
<body>
    <form id="form1" name="form1" method="post" action="testingjava.php"> 
    <?php
        $conn = mysql_connect("localhost","root","");
        if(!$conn)
            echo ("Could not connect");
        mysql_select_db("dbuser",$conn);
        $query=mysql_query("Select * from offset_form where Approved=''");
        while($fetch=mysql_fetch_array($query)) {
            $ecode=$fetch['Employee_Code'];
            //$_SESSION['ecode']=$ecode;
            $ename=$fetch['Employee_Name'];
            $epos=$fetch['Employee_Position'];
            $edpt=$fetch['Employee_Department'];
            $dleave=$fetch['Date_Leave'];
            $dreturn=$fetch['Date_Return'];
            $reason=$fetch['Offset_Reason'];
            echo "".$ecode ."".$ename." ".$epos." ".$edpt." ".$dleave." ".$dreturn." ".$reason;
            echo "<input type='radio' name='approval' onChange='Approval()'>Yes";
            echo "<input type='radio' name='approval'>No";
            echo "<input type='text' name='remarks' size='30'>";
            echo"<hr id='br'></hr>";
            echo"<input type='submit' value='Submit' name='send' onClick='Approval()'>";
        }
    ?>
    </form>
</body>
</html>

我只是在测试在触发单选按钮时操纵我的数据库。

1(你应该使用mysql_real_escape_string($_GET[](或有人将mysql命令注入你的系统,如DROP TABLE,这将是你的数据库的终结。

2(其次,我会转向使用PHP PDO,它更安全,速度更快(很长(。

3(将您的SCOD更改为最后一行

mysql_query($sql,$conn); 

mysql_query($sql,$conn) or die(mysql_error()." _____is the string correct? ".$sql);

然后应该回显出任何错误,如果您发布回显错误,我们可能可以修复它

看了之后,我猜问题是你错过了$q周围的 ..,所以$sql包含字符串"$q"而不是分配给变量的字符串$q

试试这个

$sql="update offset_form set Approved ='".$q."' where Employee_Code='".$ecode."'");

试试这种方式。

     $sql=("update offset_form set Approved ='".$q."' where Employee_Code='".$ecode."'");

始终尝试回显您的查询,看看您的查询出了什么问题。

如果密码设置为您的DBMS,则提供第三个参数 passwrod

$conn = mysql_connect("localhost","root","<passwrod>"); 

或者,如果未设置密码,则可以将其留空。并尝试这个

$sql="update offset_form set Approved =$q where Employee_Code=$ecode";

$sql="update offset_form set Approved ='".$q."' where Employee_Code='".$ecode."'";

注意:双引号会解析PHP变量,很可能您使用的引号方式有问题。

你的查询是你想要的吗?

令人困惑的一件事是,您已经注释掉了以下内容:

"INSERT INTO offset_form (Approved) VALUES ('".$ecode."')"

然后你把它作为你的更新:

"UPDATE offset_form SET Approved = '$q' WHERE Employee_Code = '".$ecode."'"

您使用的值不在一起。当然,您应该拥有:

"UPDATE offset_form SET Approved = '$q' where Approved = '".$ecode."'"

这是因为您将$ecode插入到列Approved中,但随后在另一列中搜索$ecode Employee_Code 。也许您需要修改插入语句?无论是那个还是$ecode可能只是在不同时间表示两个不同的值?

引号

切换引号

将产生影响的唯一方法是嵌入值本身包含引号。在这种情况下,使用正确的转义函数将解决问题。因此,您可以自由使用:

"UPDATE offset_form SET Approved = '$q' where Approved='$ecode'"

或:

"UPDATE offset_form SET Approved = '".$q."' where Approved = '".$ecode."'"

或:

'UPDATE offset_form SET Approved = "'.$q.'" where Approved = "'.$ecode.'"'

但不是:

'UPDATE offset_form SET Approved = "$q" where Approved = "$ecode"'

前三个中的任何一个都不应该有所作为。

更多要做的事情

反引号通常,我

总是使用反引号编写转义表和列名称的查询,以确保我不会意外使用保留字:

"UPDATE `offset_form` SET `Approved`='$q' WHERE `Employee_Code`='".$ecode."'"
仔细检查数据集

确保您尝试在 PHP 中运行的相同查询在您的 dbms 中工作。这涉及在PHP中回显查询,然后通过PHPMyAdmin,Navicat或编码之外用于访问数据库的任何内容执行它。例如,具有硬编码值的查询,如果这不起作用,则查询或数据库设计中存在与PHP无关的逻辑问题:

"UPDATE offset_form SET Approved='13' WHERE Employee_Code='12'"
检查您的空白区域

有时,看起来应该工作的查询会遇到问题,因为您的列值包含意外的不可见空格。如果是这样,则只能使用以下内容来选择它们:

"UPDATE offset_form SET Approved='$q' WHERE Employee_Code LIKE '%".$ecode."%'"
检查用户权限

确保您的MySQL用户能够执行您正在尝试的查询类型,这意味着允许SELECT,INSERT和UPDATE查询。

免責聲明

正如其他人已经说过的,您应该升级到未弃用的数据库访问方法。如果没有,您至少应该使用mysql_real_escape_string来更好地防范恶意意图。

请调试 $q 的值并尝试运行以下代码:

session_start();
    $q=$_GET['q'];
    $ecode=$_GET['ecode'];
    $conn = mysql_connect("localhost","root","");
    if(!$conn)
        echo ("Could not connect");
    mysql_select_db("asiantech",$conn);
    echo"".$ecode;
    echo"<br>".$q;
    $sql="update offset_form set Approved ='".mysql_real_escape_string($q)."' where Employee_Code='".$ecode."'";
    //$sql = "INSERT INTO offset_form (Approved) VALUES ('".$ecode."')";
    mysql_query($sql,$conn);