我将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将出错,因为触发器已存在.但是,由于您不检查错误,因此脚本可能会继续愉快地运行.
同样,触发器的制作方式将始终将同一条记录插入到创建触发器时插入的详细信息表中.
最后,您的代码存在一些严重的安全问题:
>您直接在SQL中使用POST变量,这使您可以进行SQL注入
>无论您的网站正在运行的是哪个用户,都可能没有执行CREATE TRIGGER之类的DDL语句的权限