我正在使用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和其他值。这就是我被困住的地方。
我是新来的,所以请耐心等待。
提前谢谢。
答案 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。