2013-10-31 28 views
0

尚未能找到有用的解決方案,所以我要開槍了。每當我嘗試運行驗證腳本時,我都會遇到此錯誤。無效的查詢:行'y'處的列'x'的數據太長

我們爲各個學校運行一個數據庫管理系統,當該學校的第一個用戶註冊時(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

$ s是一個字符串,包含「SELECT DISTINCT' Staff' FROM'mldb'.'staff' WHERE'idStaff' = $ id」,您試圖將其存儲在Staff列中....多大該列是定義爲?你真的想在你的數據庫列中存儲查詢字符串嗎? –

回答

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.應用您的SQL,存儲在$s中作爲子查詢另一個選項可能是單獨執行查詢$s

提示:您應該關心將用戶數據直接替換爲SQL,因爲它很容易受到SQL注入的影響。

+0

我沒有意識到查詢中的查詢 - 這解釋了爲什麼試圖向我的查詢添加結果命令給我更多的問題然後回答,因爲我然後將不得不添加fetch_row命令。謝謝! –