dtx9931 2014-11-06 19:42
浏览 72
已采纳

尝试使用PDO从表单插入数据[关闭]

I am trying to switch from mysql to PDO and not ure how to go about this I get Fatal error: Call to undefined method PDO::prepared() in C:\wamp\www\Systems\insert_process.php on line 12 Looking to see if any one can give me a sample or point me in the right direction all tutorials are showing me how to insert data but not with a submit form.

<?php

$db_host = "localhost";
$db_username = "root";
$db_pass = "";
$db_name = "systems_requests";

$dbh = new PDO('mysql:host='.$db_host.';dbname='.$db_name,$db_username,$db_pass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

$add_member= $dbh->prepared("INSERT INTO requests(lanId, name, department, manager, request,  request_description, request_comments, status, comments, compUser, compDt) Values (?,?,?,?,?,?,?,?,?,?)");
$add_member->bindParam(1, $_POST["lanId"]);
$add_member->bindParam(2, $_POST["name"]);
$add_member->bindParam(3, $_POST["department"]);
$add_member->bindParam(4, $_POST["manager"]);
$add_member->bindParam(5, $_POST["request"]);
$add_member->bindParam(6, $_POST["request_description"]);
$add_member->bindParam(7, $_POST["request_comments"]);
$add_member->bindParam(8, $_POST["status"]);
$add_member->bindParam(9, $_POST["comments"]);
$add_member->bindParam(10, $_POST["compUser"]);
$add_member->bindParam(11, $_POST["compDt"]);



$dbh->close();

$email = $_POST["emailaddress"]; 

$to = "";
$subject = "Systems Request";
$headers = "From: "; 

$message = "LanID: " . $lanId . " 

" ."User Name: ".  $name ." 

". "Department: " . $department . " 

" ."Manager: ".  $manager . " 

". "User Request: " . $request . "

" ."User Request Description: ".  $request_description .  " 

" ."User Request comments: ".  $request_comments .  "

" ."Status: " .  $status .  " 
 
" ."Systems comments: ".  $comments .  " 
 
" ."Completed by: ".  $compUser ;

mail($to,$subject,$message,$headers); 


echo ("<br> <a href='http://a0319p528/dc399Homepage/'> DC399Homepage </a>");
?>
<html>
<body>
<br><br><br>

<h1 align="center">Systems Request Confirmation</h1>
<p align="center">Thank you, <?php echo $_POST["name"]; ?><br><br>
    Your request has been sent. Your request number is <?php echo $id;?><br>
    Please write this number down or print this page out.</p>

<div align="center">
    <h2>Request Information</h2>
    Date Request: <?php $date = new DateTime();
echo $date->format('m/d/Y H:i:s') . "
";  ?><br>
    Manager: <?php echo $_POST["manager"]; ?><br>
    Location: <?php echo $_POST["department"];  ?><br>
    Request Issue: <?php echo $_POST["request"];  ?> <?php echo $_POST["request_description"];  ?><br>
    Request Comments: <?php echo $_POST["request_comments"];  ?><br>
</div>
<div align="center">
    <h2>Status Information</h2>
    Status: <?php echo $_POST["status"];  ?><br><br><br><br>
</div>
<div align="center"><button onClick="window.print()">Print this page</button></div>
</body>
</html> 

</div>
  • 写回答

3条回答 默认 最新

  • dongpeng8994 2014-11-06 19:53
    关注

    You've made an edit without marking it as an edit under your original question.
    This is as per your originally posted question should anyone ask why (the answer).


    It's prepare and not prepared which is the reason why you're getting the fatal error.

    $add_member= $dbh->prepare("INSERT INTO requests ...
    

    Plus, you're not executing

    add:

    $add_member->execute();
    

    after

    $add_member->bindParam(11, $_POST["compDt"]);
    

    as per the docs

    http://php.net/pdo.prepared-statements

    <?php
    $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
    $stmt->bindParam(1, $name);
    $stmt->bindParam(2, $value);
    
    // insert one row
    $name = 'one';
    $value = 1;
    $stmt->execute(); // <=== right there
    
    // insert another row with different values
    $name = 'two';
    $value = 2;
    $stmt->execute();
    ?>
    

    and

    <?php
    $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
    $stmt->bindParam(':name', $name);
    $stmt->bindParam(':value', $value);
    
    // insert one row
    $name = 'one';
    $value = 1;
    $stmt->execute();
    
    // insert another row with different values
    $name = 'two';
    $value = 2;
    $stmt->execute();
    ?>
    

    Edit and as per your comment:

    "I am getting this error now Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\wamp\www\Systems\insert_process.php on line 25"

    You have 11 binds but only 10 values

    (?,?,?,?,?,?,?,?,?,?)
    

    add one.

    (?,?,?,?,?,?,?,?,?,?,?)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题