我将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>
简短的回答-不,你不必这样做,因为在代码中创建它也会在MySQL中创建它。但你有更大的问题。
更长的答案-
触发器是数据库的一部分,通常不会从代码中创建触发器。创建触发器的方式与创建表的方式相同——在MySQL中创建一次触发器,它们会一直保留到您删除它们。
从技术上讲,您所拥有的代码可以工作,但CREATE TRIGGER
语句只有在第一次被调用时才会成功。在该脚本的后续执行中,CREATE TRIGGER
将出错,因为触发器已经存在。但由于您没有检查错误,您的脚本可能会愉快地继续运行。
此外,按照创建触发器的方式,它将始终向创建触发器时插入的details
表中插入相同的记录。
最后,您的代码存在一些严重的安全问题:
- 您直接在SQL中使用
POST
变量,这将打开SQL注入 - 无论您的站点作为什么用户运行,都可能不应该有权限执行像
CREATE TRIGGER
这样的DDL语句