首页 文章

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

提问于
浏览
0

我正在使用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

    一种方法是让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() 以确定是否插入了行 . 对于希望插入行的"normative"情况,这减少了到数据库的往返次数 .


    NOTE: 避免使用mysql_函数并使用mysqli_或PDO代替 .

  • 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

    你真正需要做的就是这个 .

    // 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() .

相关问题