0

在 PDO 中使用 exec() 创建表后,显示如下

Array ( [0] => 00000 [1] => [2] => )

这是一个错误还是我成功创建了我的表?当我在数据库中查找时,表已创建。

这就是我执行的

try{

    $tbl = new PDO("mysql:host=localhost;dbname=myDB",'root',''); 
     $tbl->exec("CREATE TABLE test(fld1 CHAR(40),fld2 CHAR(40))")
     or die(print_r($tbl->errorInfo(),true));
   }
catch(Exception $e){
     echo $e.getMessage();
 } 

@Vikas,如果我错了,请纠正我。这是有效的

    $queryTBl="CREATE TABLE test(fld1 CHAR(40),fld2 CHAR(40))";

    $evaluateTBL=tbl->exec($queryTBL);

    if ($evaluateTBL===false)
         print "Test table could not be created";
    else
         print "Successfully Created";
4

1 回答 1

2

根据PDO::exec 手册,它返回受查询影响的行数。并且没有受CREATE查询影响的行。因此exec,即使成功,此查询也会返回 0。并将对其进行评估false。这解释了为什么die即使没有错误也会被调用。

最好依赖异常或执行=== falseexec 的返回代码来确定它是否失败。从手册:

此函数可能返回布尔值 FALSE,但也可能返回计算结果为 FALSE 的非布尔值。请阅读有关布尔值的部分以获取更多信息。使用 === 运算符测试此函数的返回值。

做同样事情但有例外的例子:

try {
  $connection = new PDO("mysql:host=localhost;dbname=myDB",'root','');
  $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  $connection->exec('CREATE TABLE test(fld1 CHAR(40),fld2 CHAR(40))');
} catch (PDOException $e) {
  <handle exception>
}
于 2012-05-12T10:02:35.090 回答