2015-06-13 69 views
-1

在Google上搜索後,我才知道, 我不能在INSERT查詢中使用WHERE子句.. 但是我想在列「Book_4」上插入一個值, 「Student_ID = 1」INSERT語句中使用mysql/php的WHERE子句

我該怎麼做? 有沒有其他方法可以做到這一點?

會感謝你!

$Query = "INSERT INTO issued_books (Book_4) VALUES ('$IssuedBookNumber')" ; 

編輯: 更多詳細信息 使用插入查詢,當我插入列「student_id數據」在我的表中的值。 Student_ID行(Student_ID除外)中的所有列在我的數據庫中顯示爲0。 我知道這是什麼意思根據數據庫。 它可能爲空或數字0. 如果它是數字0,則應使用UPDATE語句更新它。 但是,每當我試圖更新它,它永遠不會更新使用UPDATE語句。這就是爲什麼我問!

P.S:所有列都有數據類型INT。

希望你明白我想說的話:)

這裏是完整的代碼。 假設:student_id數據已經創建具有值2。 IssuedBookNumber = 51

使用上述值: 結果=一個新行創建具有除了列「IssuedBookNumber」,即具有值= 51的所有列0。

雖然我想,結果應該是: 論行student_id數據= 2時,Book_4應51.

問題是,當我在student_id數據插入的值,所有其它列在同一行上變爲0 。但是,當同一行中的任何一列有除0之外的任何數字(當我在Student_ID中插入一個值時,它自動出現在所有列上)。更新查詢將工作..!

$IssuedBookNumber = $_POST['IssuedBookNumber']; 
    $Student_ID = $_POST['StudentId']; 

    $FetchingQuery = "SELECT * FROM issued_books WHERE Student_ID='" . $Student_ID . "'"; 

    $RunFetchingQuery = mysql_query($FetchingQuery); 


    while ($row = mysql_fetch_array($RunFetchingQuery)) { 

      $Book_1 = $row[ 'Book_1' ]; 
      $Book_2 = $row[ 'Book_2' ]; 
      $Book_3 = $row[ 'Book_3' ]; 
      $Book_4 = $row[ 'Book_4' ]; 
      $Book_5 = $row[ 'Book_5' ]; 

      } 

      if(!empty($Book_4)) 
      { 
       $Update = "UPDATE issued_books SET Book_4='$IssuedBookNumber' WHERE Student_ID= '$Student_ID'"; 
      mysql_query ($Update); 
      } 

      else 
      { 
       $AddQuery = "INSERT INTO issued_books (Book_4) VALUES ('$IssuedBookNumber')"; 
    mysql_query ($AddQuery); 
      } 
+0

這是因爲規定^但INSERT語句將不接受一個WHERE子句....學習了一下SQL –

+0

的['INSERT ... ON DUPLICATE KEY UPDATE'(HTTP://開發。 mysql.com/doc/refman/5.6/en/insert-on-duplicate.html)。 –

+0

我們需要知道您正在使用哪個MySQL API進行連接。 'mysql_'? 'mysqli_'? PDO?其他? –

回答

2

那不是INSERT。這是一個更新。 INSERT語句插入一個新的行。 UPDATE語句更新現有的行。

UPDATE issued_books 
SET Book_4 = '$IssuedBookNumber' 
WHERE Student_ID = '$Student_ID' 

(我假設你已經正確地轉義$IssuedBookNumber$Student_ID

+0

您如何看待['INSERT ... ON DUPLICATE KEY UPDATE'](http://dev.mysql.com /doc/refman/5.6/en/insert-on-duplicate.html)因爲OP狀態*「我知道,我不能在我的INSERT查詢中使用WHERE子句」*。也許這是一個選擇。 –

+0

這是一個選項,如果他們不知道該記錄是否提前存在 –

+0

使用插入查詢,當我在表中的「Student_ID」列中插入一個值。 Student_ID行(Student_ID除外)中的所有列在我的數據庫中顯示爲0。 我知道這是什麼意思根據數據庫。 它可能爲空或數字0. 如果它是數字0,則應使用UPDATE語句更新它。 但是,每當我試圖更新它,它永遠不會更新使用UPDATE語句。這就是爲什麼我問! P.S:所有列都有數據類型INT。 希望你明白我想說的話:) –

0

爲什麼不能是這樣的:

$Query = "INSERT INTO issued_books (Book_4, Student_ID) 
      VALUES ('$IssuedBookNumber', '$Student_ID')" 
+0

@@ kojow7行已被插入。無法再次使用相同的ID插入students_id。他需要更新該行。 –

+0

@KirsSudh你怎麼知道這行已經被插入?也許這個ID在另一個表中,並且這個表使用一個到它的外鍵鏈接。 OP從未提供足夠的信息來知道這種或那種方式。 – kojow7

+1

那是真的,@Mustaasam沒有正確地問。這是一個猜測,他在'insert'語句中使用'where'子句,也許他正在搜索一行並將其插入'null'' Book_4'列。所以我們認爲他可能會更新。 –

0

使用update聲明。

update issued_books set Book_4 = $IssuedBookNumber 
where Student_ID = '$Student_ID' 
+0

使用插入查詢,當我在我的表中的列「Student_ID」中插入一個值。 Student_ID行(Student_ID除外)中的所有列在我的數據庫中顯示爲0。 我知道這是什麼意思根據數據庫。 它可能爲空或數字0. 如果它是數字0,則應使用UPDATE語句更新它。 但是,每當我試圖更新它,它永遠不會更新使用UPDATE語句。這就是爲什麼我問! P.S:所有列都有數據類型INT。 希望你明白我想說的話:) –

+0

你已經將所有列的dtype設置爲'INT'?在「Book_4」列中有什麼類型的值?如果'student_id'列已被插入,則使用'update'語句來更新。 –

+0

是的,所有的dty都是INT。 Book_4也是整數。 我試過更新,但沒有工作! –

1

如果你能在兩列組合(book_4,student_id數據)添加唯一索引

這將是一個很好的查詢andshould取代大部分代碼上面

INSERT INTO issued_books (book_4, student_id) VALUES('$IssuedBookNumber','$Student_ID') 
ON DUPLICATE KEY UPDATE 
SET Book_4 = '$IssuedBookNumber'; 

注意:因爲$ Book_4將始終返回最後一行的值,所以不需要上面的while循環。

你的代碼,然後將這個樣子:)

$IssuedBookNumber = $_POST['IssuedBookNumber']; 
$Student_ID = $_POST['StudentId']; 

$Update = "UPDATE issued_books SET Book_4='$IssuedBookNumber' WHERE Student_ID= '$Student_ID'"; 
mysql_query ($Update); 

事情你應該考慮,

  1. 切換到使用PDO或mysqli的
  2. 逃生變量可能是你的代碼很容易受到SQL注入。也許在切換到PDO或mysqli後,您可以使用準備語句。