2010-08-23 3 views
0

Bonjour tout le monde,Comment exécuter une procédure stockée à l'aide de variables de formulaire PDO et PHP?

Je suis très nouveau pour les instructions préparées PDO et j'ai besoin de quelques conseils/coups de pouce doux. J'ai créé la procédure stockée MySQL suivante:

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

En lisant la documentation sur PDO, je comprends que la déclaration suivante est utilisée pour ouvrir la connexion et le bloc catch try définit les paramètres. C'est là que je suis confus. Voici mon bloc de code jusqu'ici:

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

Questions:
1. Quelle est la syntaxe correcte pour associer mes paramètres d'entrée de procédure avec mes variables de formulaire PHP? Est-ce quelque chose comme:

$_Post['salutation'] = p_salutation 
  1. Reginsert.php contient les instructions ci-dessus AOP. Comment puis-je l'appeler depuis mon bouton de soumission sur le formulaire?

  2. Suggérez-vous de créer une fonction de fichier et de conteneur séparée pour l'e-mail de confirmation? Si oui, comment puis-je déclencher l'exécution de ce fichier après l'exécution de reginsert.php sans erreur?

Merci beaucoup d'avoir aidé ce débutant privé de sommeil. C'est très apprécié !!

EDIT:

Voici le code révisé pour reginsert.php. Lorsque je fournis des données de formulaire valides et que vous appuyez sur Envoyer, aucun enregistrement n'est inséré dans la base de données. Pouvez-vous me diriger dans la bonne direction?

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

Répondre

1

Je suis venu ici à la recherche de conseils (trouvé sur Google.) Avant même testé le mien, mais je pouvais voir que vous n'êtes pas seulement en utilisant un seul endroit porte (la marque?) Pour votre requête (la appel de routine) mais vous essayez également d'envoyer des paramètres nommés à cela.

Votre code devrait ressembler probablement plus comme celui-ci

$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); 
// ... 

Je n'avais qu'un seul paramètre pour ma routine, mais cela a fonctionné en utilisant la variation du nom (peut-être un peu trop tuer pour moi.)

Questions connexes