一旦我们在php页面中创建触发器,那么我们是否需要在Mysql中创建相同的?

时间:2013-07-03 17:13:42

标签: php mysql triggers

我使用Mysql作为我的PHP代码的数据库目的。

我在php代码中创建了触发器,如下所示,现在我需要在mysql中创建它吗?

我的下面将数据插入表中,并显示表的内容。但是我在触发器中执行的操作没有做任何改变。触发器有问题吗?

一旦它开始正常工作但我更改了表名后它停止工作,虽然我保持表名与php页面和mysql相同。

<html>
<body>
<?php

$id=$_POST['id'];
$fname=$_POST['fname'];
$lname=$_POST['lname'];
$city=$_POST['city'];

$con=mysqli_connect('127.0.0.1:3306' ,'root','root','my_db');
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$sql1="select * from student";
$result = mysqli_query($con,$sql1);
echo "<table border='1'>

<tr>
<th>Id</th>
<th>Firstname</th>
<th>Lastname</th>
<th>City</th>
</tr>";

while($row = mysqli_fetch_array($result,MYSQLI_ASSOC))
{
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['fname'] . "</td>";
echo "<td>" . $row['lname'] . "</td>";
echo "<td>" . $row['city'] . "</td>";
echo "</tr>";
}
echo "</table>"; 

**$sql3 = "CREATE TRIGGER MysqlTrigger AFTER INSERT ON student FOR EACH ROW BEGIN INSERT INTO details VALUES ($id,$fname,$lname,$city);";**
mysqli_query($con,$sql3);


$sql5="INSERT INTO student (id,fname, lname, city)
VALUES
('$_POST[id]','$_POST[fname]','$_POST[lname]','$_POST[city]')";
mysqli_query($con,$sql5);

echo "1 record added";

print "<h2>After performing Trigger updated table details</h2>";
echo "<table border='1'>
<tr>
<th>Id</th>
<th>Firstname</th>
<th>Lastname</th>
<th>City</th>
</tr>";

$sql4="select * from details";
$res = mysqli_query($con,$sql4);
while($row = mysqli_fetch_array($res,MYSQLI_ASSOC))

{
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['fname'] . "</td>";
echo "<td>" . $row['lname'] . "</td>";
echo "<td>" . $row['city'] . "</td>";

echo "</tr>";
}
echo "</table>"; 

mysqli_close($con);

?>
</body>
</html>

1 个答案:

答案 0 :(得分:4)

简短回答 - 不,你没必要因为在代码中创建它也会在MySQL中创建它。但是你有更大的问题。

更长的答案 -

触发器是数据库的一部分,通常您不会从代码创建触发器。你可以像创建表一样创建触发器 - 在MySQL中创建它们一次,它们会一直存在,直到你放弃它们为止。

从技术上讲,您拥有的代码将起作用,但CREATE TRIGGER语句仅在第一次调用时才会成功。在该脚本的后续执行中,CREATE TRIGGER将错误输出,因为触发器已存在。但是,由于您没有检查错误,您的脚本可能会继续愉快地继续。

此外,您的触发器的方式,它将始终将相同的记录插入到创建触发器时插入的details表中。

最后,您的代码存在严重的安全问题:

  1. 您正在SQL中直接使用POST变量,这样就可以打开SQL注入
  2. 您的网站运行的用户可能没有权限执行CREATE TRIGGER
  3. 等DDL语句