创建表后,它显示此数组([0] => 00000 [1] => [2] =>)

时间:2012-05-12 09:40:58

标签: php mysql pdo

在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";

1 个答案:

答案 0 :(得分:2)

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

最好是依赖异常或在exec的返回代码上执行=== false来判断它是否失败。从手册:

  

此函数可能返回布尔值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>
}