2010-08-23 90 views
0

晚上好,如何使用PDO和PHP表单变量执行插入存储过程?

我对PDO准备的陈述非常陌生,需要一些指导/温和推动。我创建了下面的MySQL存储过程:

-- -------------------------------------------------------------------------------- 
-- Routine DDL 
-- -------------------------------------------------------------------------------- 
DELIMITER $$ 

CREATE DEFINER=`root`@`%` PROCEDURE `RegInsert`(
IN p_regid int, 
IN p_username VARCHAR(45), 
IN p_password VARCHAR(45), 
IN p_confpassword VARCHAR(45), 
IN p_status INT(1), 
IN p_salutation VARCHAR(45), 
IN p_firstname VARCHAR(45), 
IN p_lastname VARCHAR(45), 
IN p_jobtitle VARCHAR(45), 
IN p_telephone VARCHAR(45), 
IN p_companyname VARCHAR(45), 
IN p_industry VARCHAR(45), 
IN p_address VARCHAR(45), 
IN p_city VARCHAR(45), 
IN p_state VARCHAR(45), 
IN p_country VARCHAR(45), 
IN p_postalcode VARCHAR(45), 
IN p_regtype VARCHAR(45), 
IN p_interest VARCHAR(45), 
IN p_hdsprovider VARCHAR(45) 
) 
BEGIN 
Insert into regdata(
RegID, 
UserName, 
Password, 
Confpassword, 
Status, 
Salutation, 
FirstName, 
LastName, 
JobTitle, 
Telephone, 
Companyname, 
Industry, 
Address, 
City, 
Country, 
State, 
PostalCode, 
RegType, 
Interests, 
HDSprovider 
) 
values(
p_regid, 
p_username, 
p_password, 
p_confpassword, 
p_status, 
p_salutation, 
p_firstname, 
p_lastname, 
p_jobtitle, 
p_telephone, 
p_companyname, 
p_industry, 
p_address, 
p_city, 
p_country, 
p_state, 
p_postalcode, 
p_regtype, 
p_interest, 
p_hdsprovider 
); 
END 

在阅读上PDO的文件,据我所知,下面的语句是用来打开连接和try catch块设置的参数。这就是我感到困惑的地方。这里是我的代码块迄今:

<?php 
require once ("/home/somedir/pdo_connect.php") 
try{ 
$dbh=pdo_connect.php(); 
$stmt = $dbh->prepare("CALL RegInsert(?)"); 
$stmt->bindParam 
} 
catch (PDOException $e) { 
print "Error!: " . $e->getMessage() . "<br/>"; 
die(); 
} 
?> 

问题:
1.什么是我的过程的输入参数与我的PHP表单变量相关联的正确语法?是这样的:

$_Post['salutation'] = p_salutation 
  • Reginsert.php含有上述PDO语句。我如何从表单上的提交按钮调用它?

  • 您是否建议为确认电子邮件创建单独的文件和容器功能?如果是这样,那么在reginsert.php运行没有错误后,如何触发该文件运行?

  • 非常感谢您帮助这位睡眠不足的新手。非常感谢!

    编辑:

    这是reginsert.php的修订代码。当我提供有效的表单数据并按提交时,记录不会插入到数据库中。你能引导我走向正确的方向吗?

    <?php 
    require once ("/home/mydir/pdo_connect.php") 
    try{ 
    $dbh=pdo_connect.php(); 
    $stmt = $dbh->prepare('CALL RegInsert(?)'); 
    $stmt->bindParam(':p_username',$email_address,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_password',$create_password,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_confpassword',$confirm_password,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_salutation',$salutation2,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_firstname',$first_name,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_lastname',$last_name,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_jobtitle',$job_title,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_telephone',$telephone,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_companyname',$company_name,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_industry',$industry,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_address',$address,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_city',$city,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_state',$state,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_country',$country,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_postalcode',$postal_code,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_regtype',$partner_customer_other,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_interest',$interests,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_hdsprovider',$provider_partner,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_passwordremindquestion',$password_reminder_question,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_passwordremindanswer',$password_reminder_answer,PDO::PARAM_STR,45); 
    $stmt->execute(); 
    } 
    catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
    } 
    ?> 
    

    回答

    1

    我来到这里寻找的建议(在谷歌找到。)在我还没有测试我的,但我看得出来,你是不是只使用一个占位符(在○标记)为您的查询(在例程调用),但你也试图发送命名参数。

    你的代码也许应该看起来更像这个

    $stmt = $dbh->prepare('CALL RegInsert(:p_username, :p_password, :p_confpassword[, ...])'); 
    $stmt->bindParam(':p_username',$email_address,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_password',$create_password,PDO::PARAM_STR,45); 
    $stmt->bindParam(':p_confpassword',$confirm_password,PDO::PARAM_STR,45); 
    // ... 
    

    我只为我的日常一个参数,但它的工作使用命名的变化(可能有点过杀我。)