0

还没有找到一个有用的解决方案,所以我要开火了。每当我尝试运行验证脚本时,我都会遇到此错误。

我们为各个学校运行一个数据库管理系统,并在该学校的第一个用户注册时收集整个学校的数据(可以说是超级管理员)。当该学校的后续工作人员注册时,他们的注册条目随后会根据数据库进行检查,以将新注册人与正确的工作人员联系起来(当然,如果适用的话)。

为了避免在员工具有相同姓氏/姓名首字母时出现错误(这当然很有可能),我正在开发一个验证脚本,该脚本会在出现具有相似首字母/姓氏组合的人数时自动启动。

$sql=("SELECT `idStaff`, `Staff` FROM `mldb`.`staff`
WHERE `Staff` LIKE '%$in%$sn'");

$qu=mysqli_query($dbc,$sql);
id=mysqli_fetch_array($qu);

if (mysqli_num_rows($qu) > 1)
   {
     load ('duplication.php') ;
   }

在复制页面上,打印了所有工作人员的完整循环(带有他们的全名和主题区域),用户可以在其中单击相应的名称。这些名称中的超链接重定向到验证脚本,如下所示:

{
    echo '<p>We have found multiple entries with that name. Please verify who you are.</p>' ;
            {               
                while ($row = mysqli_fetch_array ($r, MYSQLI_ASSOC))
                    {
                        echo '<br><a href="verification.php?id='.$row['idStaff'].
                        '"> ' . $row['Staff'] . ',  ' . $_SESSION['School'] . ', '  
                        . $_SESSION['SubjectArea'] . ' </a>' ;
                    }

            }

下面是验证脚本,它(应该)更新注册用户表以将员工 ID 和员工全名添加到注册用户,这样他们就不会再显示为重复了。

if(isset($_GET['id'])) $id = $_GET['id'];
        {
            $s = "SELECT DISTINCT `Staff`
                  FROM `mldb`.`staff`
                  WHERE `idStaff` = $id" ;

            $e=$_SESSION['Email'];

            // This doesn't work - why? //
            $q="UPDATE `mldbadmin`.`user`
                SET `idStaff`='$id', `Staff`='$s'
                WHERE `Email` = '$e' AND `idStaff` IS NULL";
            $r=mysqli_query ($dbc, $q) ;

             if (!$r)
                {
                    die('Invalid query:' . mysqli_error($dbc));
                }

                    else
                        { header("location:confirmeduser.php") ; }
        }

但是,当我运行此脚本时,我收到主题标题中显示的错误消息,我无法弄清楚它发生的原因 - 因为所有列都应该能够处理所有这些数据。

Invalid query:Data too long for column 'Staff' at row 1

我觉得我在这里错过了一些非常明显的东西,但我已经坚持了很长一段时间了。有没有人可以帮助我解决我做错的事情?非常感谢!

4

1 回答 1

2

您正在尝试保存 SQL 查询文本,而不是执行它。查看您的脚本并假设Staff您应该了解您的专栏:

        $s = "SELECT DISTINCT `Staff`
              FROM `mldb`.`staff`
              WHERE `idStaff` = $id" ;

        $e=$_SESSION['Email'];

        // Look that your $s is inside ( .. )
        $q="UPDATE `mldbadmin`.`user`
            SET `idStaff`='$id', `Staff`=($s)
            WHERE `Email` = '$e' AND `idStaff` IS NULL";

- 即应用您的 SQL,$s作为子查询存储另一个选项可能是单独执行查询$s

提示:您应该关心将用户数据直接替换为 SQL,因为它容易受到 SQL 注入的影响。

于 2013-10-31T10:32:22.173 回答