2014-11-06 167 views
2

我想从mysql切换到PDO,而不是如何去这个我得到致命错误:调用未定义的方法PDO ::准备()在C:\ wamp \ www \ Systems \ insert_process.php 12行查看是否有人可以给我一个样本或指向正确的方向我所有的教程都向我展示了如何插入数据,但没有提交表单。试图从PDO插入数据表格

<?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') . "\n"; ?><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>

+0

'execute()'在哪里进来? *你去*;)[**阅读文档**](http://php.net/pdo.prepared-statements)编辑:和'准备'删除'D'。 – 2014-11-06 19:44:34

回答

7

您所做的编辑,而不将其标记为你原来的问题下一个编辑。
这是根据your originally posted question任何人都应该问为什么(答案)。


prepare而不是prepared这就是为什么你得到致命错误的原因。

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

另外,你不执行附加

$add_member->execute(); 

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

按照该文档

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(); 
?> 

<?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(); 
?> 

编辑,并按照您的评论:

"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"

你有11个结合,但只有10个值

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

加一个。

(?,?,?,?,?,?,?,?,?,?,?) 
+0

我现在得到这个错误警告:PDOStatement: :execute():SQLSTATE [HY093]:无效的参数编号:绑定变量的数量与第25行中的C:\ wamp \ www \ Systems \ insert_process.php中的标记数量不匹配 – Donny 2014-11-06 20:00:04

+0

我会研究它,但首先...您已经使用添加的execute()进行编辑,而不将其标记为**编辑**。人们将访问这个问题和我的答案,并会说“执行在那里,为什么答案”?并因此而站在被低估的地位。始终将您的代码/问题标记为原始帖子下的“添加”编辑。 @Donny – 2014-11-06 20:02:27

+0

@Donny重新加载我的答案,并在**编辑**的底部附近。 – 2014-11-06 20:04:45

4

正确的方法名称为prepare,所以更改为:

$add_member= $dbh->prepare("INSERT INTO requests(lanId, name, department, manager, request, request_description, request_comments, status, comments, compUser, compDt) Values (?,?,?,?,?,?,?,?,?,?)"); 
+1

这很好,但它缺少另一个重要部分。 – 2014-11-06 19:49:34

+0

我修好了那部分准备。现在没有错误,插入时数据库中没有数据。可能来自缺少的excute()语句,你知道我把它放在最后一个bindParam之后吗?然后,现在我必须声明我的电子邮件功能的变量才能在底部工作。 – Donny 2014-11-06 19:55:00

+0

@Donny,Fred -ii-答案是非常灵活的,按照他的指示,我认为你会达到解决方案 – 2014-11-06 20:05:58

0

是的,你必须准备功能来建立SQL查询,一旦查询准备好或建立好,它会执行并产生结果。