PDO数据未插入数据库无错误

Snap Mash
    $query2="insert into `articles` set article_title=:article,user_name=:user,post_id=:postid      article_content=:articlecontent,article_rank=:rank,add_date=:date,article_100img=:article_100,articl    e_200img=:article_200,article_400img=:article_400,artcle_600img=:article_600,article_slug=:slug";
    $stmt=$db->prepare($query2);
    $stmt->bindParam(':article',$article_title);
    $stmt->bindParam(':articlecontent',$article_desc);
    $stmt->bindParam(':rank',$rank);
    $stmt->bindParam(':date',$date);
    $stmt->bindParam(':article_100',$x100img);
    $stmt->bindParam(':article_200',$x200img);
    $stmt->bindParam(':article_400',$x400img);
    $stmt->bindParam(':article_600',$x250img);
    $stmt->bindParam(':slug',$slug);
    $stmt->bindParam(':user',$name);
    $stmt->bindParam(':postid',$id);
    $stmt->execute();

我不知道这段代码是什么问题。所以请帮助我。

你的常识

为了能够看到数据库错误,必须将PDO errmode设置为异常。在许多方面,异常比常规错误要好:它们总是包含堆栈跟踪,可以使用try..catch捕获它们,也可以使用专用的错误处理程序对其进行处理。甚至未经处理,它们也会作为常规的PHP错误,遵循站点范围的错误报告设置,提供所有重要信息。

请注意,将此模式设置为连接选项将使PDO也会在连接错误时引发异常,这非常重要。
因此,这是一个正确创建PDO连接的示例:

$dsn = "mysql:host=$host;dbname=$db;charset=utf8";
$opt = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    // other options 
);
$pdo = new PDO($dsn, $user, $pass, $opt);

通过这种方式进行连接,将始终向您通知在查询执行期间发生的所有数据库错误。请注意,您通常必须能够看到PHP错误。在实时站点上,您必须查看错误日志,因此,必须进行设置

error_reporting(E_ALL);
ini_set('display_errors',0);
ini_set('log_errors',1);

而在本地开发服务器上,可以在屏幕上显示错误:

error_reporting(E_ALL);
ini_set('display_errors',1);

当然,永远不要@在PDO语句之前使用错误抑制运算符()。

另外,由于许多错误的示例告诉您将每个PDO语句包装到try..catch块中,因此我必须做出明确的说明:

不要仅使用try..catch运算符来回显错误消息。未捕获的异常已经很好地用于此目的,因为它的行为方式与其他PHP错误相同-因此,您可以使用站点范围的设置来定义行为-因此,如果没有此无用的代码 您将收到错误消息。尽管无条件回显的错误消息可能会向潜在的攻击者显示一些敏感信息,但会使诚实的访问者感到困惑。

  • 一个自定义异常处理程序可以在以后添加,但不是必需的。特别是对于新用户,建议使用未处理的异常,因为它们非常有用,有用和安全。
  • try..catch仅在要自行处理错误时才使用-例如,回滚事务。

另外,我发现article_XXX字段非常无用。您无法命名这些图片computational吗?假设商品ID = 100500,则100张图片应为100500_100.jpg?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章