duandao2306 2012-03-09 16:55
浏览 84
已采纳

为什么这个PHP脚本不会在MySQL数据库中插入表单数据?

On form submit, I'm getting a blank page (insert.php) with no error and no success message.

This is the form:

<form action="insert.php" method="post">
Firstname: <input type="text" name="first_name" id="first_name" />
Lastname: <input type="text" name="lastname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>

This is the script:

mysql_select_db("my_db", $con);


$stmt = $db->prepare('INSERT INTO my_table (first_name) VALUES (:first_name)');

$stmt->execute(':first_name', $first_name);


if (!mysql_query($stmt,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con)
?>
  • 写回答

2条回答 默认 最新

  • duankuangxie9070 2012-03-09 16:58
    关注

    You need to create a PDO object to be able to use prepared statements. Instead you have opened a connection with mysql_connect(). The two do not mix, and PDO is preferred between them as it is more easily secured through the use of prepared statements (among other reasons).

    From the PDO docs:

    // This establishes your connection using PDO.
    // The PDO connection object is $db
    
    /* Connect to an ODBC database using driver invocation */
    $dsn = 'mysql:dbname=testdb;host=127.0.0.1';
    $user = 'dbuser';
    $password = 'dbpass';
    
    try {
        $db = new PDO($dsn, $user, $password);
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }
    

    Pass an associative array to execute(), rather than a list of arguments representing your placeholders. The

    // Now that the PDO object is successfully created, prepare your statement
    $stmt = $db->prepare('INSERT INTO my_table (first_name) VALUES (:first_name)');
    
    // Arg to execute() should be an associative array
    $stmt->execute(array(':first_name' => $first_name));
    

    The following call to mysql_query() is unnecessary, as you have already executed the prepared statement with PDO.

    // Don't do this
    // mysql_select_db("my_db", $con);
    
    // Or this...
    //if (!mysql_query($stmt,$con))
    //{
    //  die('Error: ' . mysql_error());
    //}
    
    // Or this...
    // mysql_close($con)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料