2012-07-26 103 views
0

我正在處理一個插入數據到MySQL的表單,但在數據插入之前,有一個字段必須在插入之前在另一個表中檢查。如果此值存在於另一個表中,則數據將插入主表中,如果不存在,則不插入數據。檢查值是否存在於另一個表中,然後插入

這裏是我的代碼中插入數據:

 

    $host="localhost"; 
    $username="root"; 
    $password=""; 
    $db_name="forms"; 
    $tbl_name="table1"; 

    mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
    mysql_select_db("$db_name")or die("cannot select DB"); 

    $nombre=$_POST['nombre']; 
    $apellido=$_POST['apellido']; 
    $cedula=$_POST['cedula']; 
    $email=$_POST['email']; 
    $telefono=$_POST['telefono']; 
    $establecimiento=$_POST['establecimiento']; 
    $codigo=$_POST['codigo']; 

    $sql=" INSERT INTO $tbl_name(Nombre, Apellido, Cedula, Email, Telefono, Establecimiento, Codigo)VALUES('$nombre', '$apellido', '$cedula', '$email', '$telefono', '$establecimiento', '$codigo')"; 

    $result=mysql_query($sql); 

    if($result){ 
    echo "Your data was sent"; 
    } 

    else { 
    echo "You inserted a wrong code"; 
    } 

    ?> 

    

所以,我需要的是檢查表2中的值是$ codigo,如果存在,然後插入$ codigo table1中與其他值。這是我卡住的地方。

林在這個新的,所以忍受着我。

預先感謝您。

+0

可能重複http://stackoverflow.com/questions/554205/with-mysql-how-do-i-insert-into-a-table-on-condition-that-the-value-does-not-ex ?rq = 1 – FatalError 2012-07-26 16:16:40

+1

另一件事是你不應該使用mysql_ *函數。使用類似mysqli_ *或PDO的東西。你現在編碼的方式是開放的SQL注入,使你的代碼具有巨大的安全風險。快速谷歌搜索將爲您指出正確的方向。 – 2012-07-26 16:24:20

回答

0

所有你真正需要做的就是這個。

// Check if Codigo already exists in table2 
$codigo = mysql_real_escape_string($_POST['codigo']); 
$result = mysql_query("SELECT Codigo FROM table2 WHERE Codigo = '$codigo'"); 

if (!mysql_num_rows($result)) { 

    // Go ahead and insert everything in table1 
    $data = array(
     'Nombre' => $_POST['Nombre'], 
     'Apellido' => $_POST['apellido'], 
     'Cedula' => $_POST['cedula'], 
     'Email' => $_POST['email'], 
     'Telefono' => $_POST['telefono'], 
     'Establecimiento' => $_POST['establecimiento'], 
     'Codigo' => $_POST['codigo'] 
    ); 

    // Make sure all the data is safe for entry into the database 
    foreach ($data as $key => $val) { 
     $data[$key] = "'" . mysql_real_escape_string($val) . "'"; 
    } 

    $fields = implode(', ', array_keys($data)); 
    $values = implode(', ', array_values($data)); 

    $result = mysql_query("INSERT INTO table1 ($fields) VALUES ($values)"); 

    echo 'Your data was sent'; 

} else { 
    echo 'Codigo already exists in table2'; 
} 

但請注意有很多方法可以做得更好更高效。首先,我建議你使用PHP的mysqli函數而不是棄用的mysql函數(http://www.php.net/manual/en/book.mysqli.php)

更重要的是,你不看就像你在保護你的查詢免受SQL注入一樣。請仔細閱讀,但通常只需要在要插入SQL查詢的任何值上使用real_escape_string()。

+0

謝謝你的迴應。這似乎更接近我想要的,但是當我測試它所做的是插入'Codigo',如果它沒有在table2中找到它。我想要的是另一種方式:在table1中找到'Codigo'。 – Mofo 2012-07-26 17:12:26

+0

哎呀,對不起。是的,在這一行'if(!mysql_num_rows($ result)){去掉'!'以反轉條件的極性。 – BadHorsie 2012-08-03 14:33:15

0

根本就與數據的其他表的SELECT查詢你檢查,然後如果mysql_num_rows()> 0,你做一個插件。像下面的東西

$query = "SELECT * FROM otherTable WHERE infoIsSame"; 
$result = mysql_query($query) or die(mysql_error()); 

if (mysql_num_rows($result) > 0) { 
    $sql=" INSERT INTO $tbl_name(Nombre, Apellido, Cedula, Email, Telefono, Establecimiento, Codigo)VALUES('$nombre', '$apellido', '$cedula', '$email', '$telefono', '$establecimiento', '$codigo')"; 

    $result=mysql_query($sql); 

    if($result){ 
     echo "Your data was sent"; 
    }else { 
     echo "You inserted a wrong code"; 
    } 
}else{ 
    echo "Not present in Other database"; 
} 
0

一種方法是讓INSERT語句爲你做的檢查:

INSERT INTO $tbl_name (Nombre, Apellido, Cedula, Email, Telefono, Establecimiento, Codigo) 
SELECT '$nombre', '$apellido', '$cedula', '$email', '$telefono', '$establecimiento', '$codigo' 
    FROM table2 
WHERE table2.Codigo = '$codigo' 
LIMIT 1 

然後檢查插入mysql_affected_rows()的行數來確定行是否被插入。對於您希望插入一行的「規範」情況,此數據庫的往返次數較少。


注:避免使用mysql_功能和使用mysqli_或PDO來代替。

相關問題