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

我正在研究一种将数据插入到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与其他值。 这是我卡住的地方。

在这个新的,所以忍受着我。

先谢谢你。


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

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


只需在您正在检查的数据上对另一个表执行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";
}

一种方法是让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。

链接地址: http://www.djcxy.com/p/21857.html

上一篇: Check if the value exist in another table and then insert

下一篇: PHP Sessions: Explanation please?