查询无效:对于'y'行的列'x',数据太长

时间:2013-10-31 10:26:05

标签: php mysql sql foreign-keys

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

我们为各个学校运行数据库管理系统,当该学校的第一个用户注册时(superadmin,就是这样),我们收集整个学校的数据。当该学校的后续工作人员注册时,他们的注册表项将根据数据库进行检查,以将新注册人与正确的工作人员(当然,如果适用)相关联。

为了避免每当员工姓氏/姓氏相同(当然很可能)时出现错误,我正在制作一个验证脚本,只要出现具有相似初始/姓氏组合的人数,该脚本就会自动启动。

$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

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

1 个答案:

答案 0 :(得分: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";

-i.e。应用存储在$s中作为子查询的SQL另一个选项可能是分别执行$s的查询。

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