无效查询:数据对于行“y”中的列“x”来说太长


Invalid query: Data too long for column 'x' at row 'y'

还没有

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

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

为了避免在工作人员具有相同的姓氏/首字母时

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

$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

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

您正在尝试保存 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 注入的影响。