无法在php中使用MYSQL INSERT INTO

时间:2014-05-03 21:02:55

标签: php html mysql xampp

实际上我是新手,并且插入到mysql的属性时遇到了问题。

我创建了两个表,即问题和答案。用户可以通过html表单提供数据(对于两个表)。由于一些未知的错误,数据没有插入答案表,问题表没有这样的问题。 奇怪的是,除了变量的名称外,两个表的php插入代码几乎相同。

singleques_info.php代码:

<?PHP

 session_start();
 $t=$_GET['p'];
 $ans= "";
 $error_message = "";
 $num_rows = 0;

 function quote_smart($value, $handle)
 {
     if (get_magic_quotes_gpc()) 
        {
         $value = stripslashes($value);
        }
     if (!is_numeric($value)) 
        {
         $value = "'" . mysql_real_escape_string($value, $handle) . "'";
        }
     return $value;
     }

 if ($_SERVER['REQUEST_METHOD'] == 'POST')
  {
         $ans = $_POST['ans'];
         $ans = htmlspecialchars($ans);
         $uLength = strlen($ans);
         if ($uLength <=100) 
          {
         $error_message = "";
          }
           else 
          {
           $error_message = $error_message . "Username must be between 10 and 20 characters" . "<BR>";
          }


    if ($error_message == "") 
      {
        $username = "root";
        $password = "";
        $database = "techinsight";
        $server = "127.0.0.1";
        $db_handle = mysql_connect($server, $username, $password);
        $db_found = mysql_select_db($database, $db_handle);

        if ($db_found) 
         {
         echo "connected";
         $ans = quote_smart($ans, $db_handle);
         $SQL = "SELECT * FROM answers WHERE answer= $ans";
         $result = mysql_query($SQL);
         $num_rows = mysql_num_rows($result);
          if ($num_rows > 0)
           {
            echo "Question already taken";
           }
            else
           }                          
            $SQL = "INSERT INTO answers (Aid, answer, date) VALUES ($t, $ans, CURDATE())";
            $result = mysql_query($SQL);
            mysql_close($db_handle);

            session_start();
            $_SESSION['login'] = "1";

            header ("Location:ques_wala_main.php");
            echo "You are done.";
           }

        }
         else 
        {
          $errorMessage = "Database Not Found";
        }

      }
      //<div class="content_mess">
  /*    else
        {
           session_start();
           $_SESSION['login'] = "";
           header ("Location: signup.php");
           echo "Please SignIn Before Asking....";
        }
  // </div> */

 }

 ?>

html表格:

 <form id="ans" method="POST" name="ans" action="#">
   <div class="field extra">
    <label>your answer:</label> <br/> <br/> <br/>
    <textarea name="ans" cols="70" rows="6"></textarea>
   </div>
   <br/> <br/>
   <input type="submit" name="submit" value="submit" />
 </form>

2 个答案:

答案 0 :(得分:1)

OP已将问题添加到脚本顶部,解决了该问题:

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

必须发现服务器上不再支持mysql_*功能,并且不得不求助于切换到mysqli_*功能。

通过多条评论与OP交谈。


现在使用mysqli_*函数时,(带有额外选项):

将错误报告添加到文件顶部,这将有助于生产测试。

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

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

MySQL(错误报告链接)


其他API:

Use mysqli with prepared statementsPDO

PDO错误处理:

答案 1 :(得分:0)

这个问题已在评论中得到解答,但我会扩展。

你似乎对两个方面感到困惑。第一个是正确的SQL语句准备,您在这里使用它。每个陈述由两个重要部分组成。您指定:

  1. 您要使用的表格的列:

    插入答案(援助,答案,日期)

  2. 以及您要对这些列使用的值:

    VALUES($ t,$ ans,CURDATE())

  3. 如果列中没有空格(或其他一些字符),MySQL syntax允许你保留未封装的列名,所以这部分是可以的。但是,取决于列类型的值可能必须使用单引号或双引号进行封装,例如,您必须封装VARCHARDATEDATETIMEBLOB的值,但通常不应对INT和{{1}等数字类型进行封装或者,当您在插入新记录(如DECIMALCURDATE()等)之前告诉MySQL服务器计算某些内容时。所以假设您的列是:

    10 + 5

    正确的SQL语句是(注意Aid - INT answer - VARCHAR date - DATE 周围的单引号和$ans周围缺少引号):

    CURDATE()

    另一个让你感到困惑的方面是PHP deals with strings。你正在做的是告诉PHP准备一行文本(字符串)并将其传递到MySQL服务器,以便服务器运行它并将结果传递回PHP(例如INSERT INTO answers (Aid, answer, date) VALUES ($t, '$ans', CURDATE()) 就是这样的结果)。问题是PHP从这个过程的开始到结束都不知道SQL语句是什么以及如何准备它。它只知道“这里是一个字符串,我需要把一些变量放进去”。因此,假设答案编号mysql_insert_id()32,则代码的这两部分为:

    a submitted answer

    会生成以下正确的字符串但不正确的SQL语句:

    $SQL = "SELECT * FROM answers WHERE answer= $ans";
    [...]
    $SQL = "INSERT INTO answers (Aid, answer, date) VALUES ($t, $ans, CURDATE())";
    

    希望解决方案现在很明显。

    上面说过,我只是回应付出代价(我们所有人都必须从某个地方开始)。这种编码风格已经过时,它的价值是有争议的(即使作为一种学习手段)。它永远不应该看到生产环境。

    编辑:

    SELECT * FROM answers WHERE answer= a submitted answer
    INSERT INTO answers (Aid, answer, date) VALUES (32, a submitted answer, CURDATE())
    

    以上应该是一个通知级别,可能不是问题。如果要检查功能是否可用,请运行以下脚本:

    Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead