Php PDO插件不';t抛出错误或插入表单数据
我正在从MYSQL切换到PDO,在我的表单上,它不会将表单数据插入数据库。奇怪的是,它没有抛出任何错误,而是在不插入数据的情况下重定向到成功页面。这是我的密码:Php PDO插件不';t抛出错误或插入表单数据,php,mysql,pdo,Php,Mysql,Pdo,我正在从MYSQL切换到PDO,在我的表单上,它不会将表单数据插入数据库。奇怪的是,它没有抛出任何错误,而是在不插入数据的情况下重定向到成功页面。这是我的密码: <?php session_start(); /*** mysql hostname ***/ $hostname = 'XXXXXXX.hostedresource.com'; /*** mysql username ***/ $username = 'XXXXXX'; /*** mysql password **
<?php
session_start();
/*** mysql hostname ***/
$hostname = 'XXXXXXX.hostedresource.com';
/*** mysql username ***/
$username = 'XXXXXX';
/*** mysql password ***/
$password = 'XXXXXXXX';
try {
$pdo = new PDO("mysql:host=$hostname;dbname=XXXXXX;charset=utf8", $username, $password);
array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
/*** echo a message saying we have connected ***/
//echo 'Connected to database';
}
catch(PDOException $e)
{
echo $e->getMessage();
}
$loan_amount = trim($_POST['loan_amount']);
$loan_type = trim($_POST['loan_type']);
$debt_amount = trim($_POST['debt_amount']);
$first_name = trim($_POST['first_name']);
$last_name = trim($_POST['last_name']);
$email = trim($_POST['email']);
$phone = trim($_POST['phone']);
$zip = trim($_POST['zip']);
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
try {
$sql="INSERT INTO leads (loan_amount, loan_type, debt_amount, first_name, last_name, email, phone, zip, reg_date) VALUES (:loan_amount, :loan_type, :debt_amount, :first_name, :last_name, :email, :phone, :zip, NOW())";
$statement = $pdo->prepare($sql);
$statement->bindValue(':loan_amount', $loan_amount);
$statement->bindValue(':loan_type', $loan_type);
$statement->bindValue(':debt_amount', $debt_amount);
$statement->bindValue(':first_name', $first_name);
$statement->bindValue(':last_name', $last_name);
$statement->bindValue(':email', $email);
$statement->bindValue(':phone', $phone);
$statement->bindValue(':zip', $zip);
$statement->execute();
}
catch(PDOException $e)
{
echo $e->getMessage();
exit();
}
header('Location: /success.php');
}
?>
问题在于语法:
$pdo = new PDO("mysql:host=$hostname;dbname=XXXXXX;charset=utf8", $username, $password);
array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
在构造函数的末尾有一个右括号和分号,这会破坏代码。您需要:
$pdo = new PDO("mysql:host=$hostname;dbname=XXXXXX;charset=utf8", $username, $password,
array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
或
您可能需要将DB连接作为参数传递给
$loan\u amount=trim($\u POST['loan\u amount'])代码>和所有其他。即:$loan\u amount=trim($pdo,$\u POST['loan\u amount'])代码>然后对所有其他的代码执行此操作。然而,我不是100%确定,当涉及到PDO时,它是否会自动完成。弗雷德:WTF?trim只修剪$password='XXXXXXXX中stringsTypo的空白代码>。缺少关闭“
@Fred hrm。。。的确如此。无论如何,至少根据我认为是php参考的php.net,trim()是否与作为参数传递PDO对象有关string trim(string$str[,string$charlist=“\t\n\r\0\x0B”])
$pdo在这里完全没有什么关系…@tonjaggart这意味着它“工作”,至少在sql错误方面是这样。虽然我确实看到了一些我认为不起作用的东西。。。数组(PDO::ATTR\U仿真\U准备=>false,PDO::ATTR\U ERRMODE=>PDO::ERRMODE\U异常)。。。应该是$pdo>setAttribute(pdo::ATTR_ERRMODE,pdo::ERRMODE_EXCEPTION);这行代码看起来像是php错误的结果?
$pdo = new PDO("mysql:host=$hostname;dbname=XXXXXX;charset=utf8", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);