【问题标题】:Why is insert not working and not outputting any error on postresql?为什么插入不起作用并且在 postgresql 上没有输出任何错误?
【发布时间】:2020-10-19 16:56:48
【问题描述】:

我尝试检查一个表是否已经存在,如果不存在,它应该创建它并将给定的数据插入到表中,但如果它已经存在,它应该直接插入数据。但我只是得到一个普通的页面。 pg_error();没有输出任何东西。有人可以帮忙吗?.. 下面是代码;

  <?php   

   $pra = "SELECT * FROM people";

   $decks = pg_query($connection, $pra); 

   if(!$decks){                         
   $sql =  "CREATE TABLE people(
   mom INT PRIMARY KEY     NOT NULL, 
   non        TEXT    NOT NULL,
   ooo        INT   NOT NULL,
   ppp          INT   NOT NULL,
   aqqq   TEXT,
   pq   TEXT

    )";

      $ins = " INSERT INTO people (mom, non, ooo, ppp, aqqq, pq)
             VALUES(
            '$mom', '$non', '$ooo’, '$ppp’, '$aqqq', '$pq')";


    $rcon =pg_query($connection, $ins);

     if(!$rcon){
        pg_last_error($connection);
             }else{
                  echo "Record added to database"; //success 
          confirmation
                  }


       }
     ?>

这里的表是如何创建的,因为我可以通过终端在数据库中看到它。但除此之外,一切都是空白,没有错误消息。

【问题讨论】:

  • 你没有对pg_last_error 做任何事情——它返回一个字符串,但你没有将它分配给任何东西。您的查询在$ppp 之后也缺少单引号,这就是插入本身不起作用的原因。 (我假设所有查询变量实际上都是在其他地方定义的)
  • 您知道您实际上并没有在 if 分支中执行任何数据库查询,对吧?您所做的只是将一些文本分配给变量。
  • 如果你想在任何情况下执行这个插入,无论是在已经存在的表中,还是你刚刚在 if 分支中创建(/试图创建)的表中 - 那么为什么插入在里面一个elseif(一般来说是else),首先?
  • '$ooo, '$ppp,
  • @iainn 哦,对不起,这是一个错误,但在原始代码中......它们已关闭。

标签: php postgresql insert create-table not-exists


【解决方案1】:

请尝试这样的事情。请注意使用pg_query_params() 而不是pg_query() 进行插入以防止SQL 注入。

 <?php   

   $pra = "SELECT * FROM people";

   $decks = pg_query($connection, $pra); 

   if(!$decks){                         
     $sql =  "CREATE TABLE people(
                mom  INT PRIMARY KEY NOT NULL, 
                non  TEXT NOT NULL,
                ooo  INT NOT NULL,
                ppp  INT NOT NULL,
                aqqq TEXT,
                pq   TEXT
              )";
      $rcon = pg_query($connection, $sql);
      if(!$rcon){
        echo pg_last_error($connection);
      } else {
        echo "Database table created"; //success confirmation
      }

   }

   $val_array = array($mom, $non, $ooo, $ppp, $aqqq, $pq);
   var_dump($val_array);
   $ins = " INSERT INTO people (mom, non, ooo, ppp, aqqq, pq)
            VALUES($1, $2, $3, $4, $5, $6)";
   $rcon =pg_query_params($connection, $ins, $val_array);

   if(!$rcon){
        echo pg_last_error($connection);
   } else {
        echo "Record added to database"; //success confirmation
   }

?>

【讨论】:

  • 我试过了,但它也显示空白页,这里的 VALUES 的内容 $1, $2...。它们是否等同于数组的值?
  • @Vvictory 我更新了答案。 1 美元、2 美元、. . .被数组中的相应值安全地替换。
  • 现在显示错误。我可以从这里开始处理。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多