检查该值是否存在于另一个表中,然后插入

时间:2012-07-26 16:13:53

标签: php mysql insert

我正在使用php中的一个表单将数据插入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";
    }

    ?> 

    

所以,我需要检查table2中的值$ codigo,如果存在,则在table1中插入$ codigo和其他值。这就是我被困住的地方。

我是新来的,所以请耐心等待。

提前谢谢。

3 个答案:

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

答案 1 :(得分: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()。

答案 2 :(得分: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。