获取通过POST方法传递的信息,并修剪字符串中的所有空间,然后启动一个新的pdo实例,连接mysql,并将POST传递的信息插入表中。
$title = trim($_POST["title"]);
$content = trim($_POST["content"]);
$dsn = "mysql:host=localhost;dbname=blog";
$con = new PDO($dsn,"root","xxxx");
$title = $con->quote($title);
$content = $con->quote($content);
try
{
$sql = "insert into tmp (`title`,`content`) values('$title','$content')";
$stmt = $con->prepare($sql);
$stmt->execute();
}
catch(PDOException $e)
{
echo $e->getMessage();
}
上面是我完成工作的PHP代码,最导入的命令是
insert into tmp (`title`,`content`) values('$title','$content')";
运行上述PHP代码不会显示任何错误信息,并且/var/log/mysql/error.log
中没有错误,但是该信息尚未插入数据库。
我更改了
insert into tmp (`title`,`content`) values('$title','$content')";
进入
insert into tmp (`title`,`content`) values($title,$content)";
POST传递的信息现在可以插入到mysql中,令我困惑的问题是:
echo $e->getMessage();
完全无效。 /var/log/mysql/error.log
中没有错误信息如何捕获这些错误?
答案 0 :(得分:0)
您要捕获的异常将永远不会抛出,因为您需要to tell PDO how you want it to handle errors。
$con = new PDO($dsn,"root","xxxx");
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
否则,将使用默认的PDO::ERRMODE_SILENT
:
这是默认模式。 PDO只需使用语句和数据库对象上的PDO :: errorCode()和PDO :: errorInfo()方法,即可设置错误代码供您检查。如果错误是由对语句对象的调用导致的,则可以在该对象上调用PDOStatement :: errorCode()或PDOStatement :: errorInfo()方法。如果错误是由于对数据库对象的调用导致的,则应改为在数据库对象上调用这些方法。
根据切线,您应该使用prepared statements。您正在使用prepare()
调用,但是没有参数化查询并按需绑定变量。使用quote()
不够安全。