如果情况属实,则需要向用户抛出错误

时间:2014-12-08 17:47:56

标签: php postgresql error-handling subquery

我有一个体育游戏选择应用程序,持续数周。现在,如果你选择一个你已经选择的一周,我会得到一个php错误。而不是我想向用户显示一条消息,说你本周已经选择了这个消息。

这是我在同一周选择时得到的错误

  ERROR: duplicate key value violates unique constraint "user_record_pkey" 
  DETAIL: Key (username, week_no)=(john, 1) already exists

继承我的代码

 <?php
            session_start();
            require_once("dbconnect.php");
            $flag = 0;
            $row = 1;
           // $weekest = $_POST['weekNum'];    

            $result3 = pg_query($conn, 'INSERT INTO demo.user_record VALUES (\''.$_SESSION['username'].'\','.$_POST['weekNum'].',0,0)') or die(pg_last_error());
            //echo $_POST['picks0'];
            //echo $_POST['picks1'];
            for($row=1;$row<=$_POST['numPicks'];$row++){


                    $pickName = "picks" . $row;
                    echo $pickName;
                    if($_POST[$pickName] == "picks$row")
                    {
                    $pick = $_POST['Tname'.$flag];
                    $flag+=2;
                    }
                    else
                    {
                    $flag++;
                    $pick = $_POST['Tname' . $flag];
                    $flag++;
                    }
                    //echo "error2";        

            $result2 = pg_prepare($conn, "myquery".$row, 'INSERT INTO demo.user_picks VALUES ($1,$2,$3,$4)') or die(pg_last_error());
            $result2 = pg_execute($conn, "myquery".$row, array($_SESSION['username'],$_POST['weekNum'], $row, $pick)) or die(pg_last_error());
                     echo "finished";
        }
   ?>

1 个答案:

答案 0 :(得分:0)

首先,函数pg_query() returns FALSE on error。你需要检查一下。链接文档中有代码示例。

其次,您的代码很容易注入SQL。你不应该使用pg_query()来解决这类问题。你应该使用pg_query_params()代替。 (相同链接。搜索&#34;用户提供的数据的字符串插值非常危险&#34;。)