我在创建php脚本时遇到了麻烦,我已经创建了将实例插入数据库,但是我得到了一个简单的输出,我不知道如何解决它。 代码是:
try{
$user = 'root';
$pass = null;
$pdo = new PDO('mysql:host=localhost; dbname=divebay', $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$username = $_POST['username'];
$password = sha1($_POST['password']);
$location = %_POST['location'];
$email = $_POST['email'];
$name = $_POST['fname'] ."" . $_POST['surname'];
$check = $pdo->prepare('SELECT * FROM user WHERE username=?');
$check->bindValue(1, $username);
$check->execute();
if($check->fetch(PDO::FETCH_OBJ)){
echo"Account name already exists";
}
else{
$stmt = $pdo->prepare('INSERT INTO user(username, password, location, email, name)
VALUES(:username, :password, :location, :email, :name)');
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':password', $password, PDO::PARAM_STR);
$stmt->bindParam(':location', $location, PDO::PARAM_STR);
$stmt->bindParam(':email', $email, PDO::PARAM_STR);
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
if($stmt->execute()){
echo"Account created";
}
else{
echo"Account could not be created";
}
}
$pdo = null;
}catch(PDOException $e){
echo $e->getMessage();
}
?>
我希望输出像"帐户创建"。 而输出我得到这个错误:
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $username =
$_POST['username']; $password = sha1($_POST['password']);
$location = %_POST['location']; $email = $_POST['email']; $name =
$_POST['fname'] ."" . $_POST['surname']; $check =
$pdo->prepare('SELECT * FROM user WHERE username=?');
$check->bindValue(1, $username); $check->execute();
if($check->fetch(PDO::FETCH_OBJ)){ echo"Account name already exists";
} else{ $stmt = $pdo->prepare('INSERT INTO user(username, password,
location, email, name) VALUES(:username, :password, :location, :email,
:name)'); $stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':password', $password, PDO::PARAM_STR);
$stmt->bindParam(':location', $location, PDO::PARAM_STR);
$stmt->bindParam(':email', $email, PDO::PARAM_STR);
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
if($stmt->execute()){ echo"Account created"; } else{ echo"Account
could not be created"; } } $pdo = null; }catch(PDOException $e){ echo
$e->getMessage(); } ?>
这个脚本出错的原因是什么?
是否在您的服务器上启用了PHP?如果您访问仅包含的PHP文件会发生什么?
另外,请仔细阅读过去的问题并接受答案。您的接受率仅为14%且非常低。有些人可能因此没有给你答案。
生病了
@LiamWarnes Chewckif PDO是否启用
@David我认为它是phpinfo()给了我一堆显示版本信息等的表
上面的文件名为* .php?
@swapnesh我试图通过添加if(extension_loaded('pdo'){在try块之前使用else {echo"php未加载"来检查但是输出保持不变所以我假设php已启用?
在setAttribute之前你有一个贴身标签吗?喜欢$pdo-?>
@LiamWarnes和其他人只是为了一个查询是正确的??? $ pass = null;或者你想要$ pass =''; < - 表示空密码
看不出这会导致php代码被输出但是你好像在这里输入错误$location = %_POST['location'];而不是$
你得到输出的唯一方法是你写的:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
如:
$pdo?>setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
因为失误。
或许,但代码块是直接从记事本++中复制的,所以情况并非如此
您在浏览器中看到的输出是您在上面看到的输出,还是原始字符串响应(例如,从视图源视图)?
在%_POST['location']上你有% INSTEAD OF $
建议:
另外,我强烈建议将PDO函数包装到类中。 以下是我在每个项目中亲自使用的内容:
将其保存到自己的文件中(例如:sql.class.php)
class SqlIt{
public $Sql;
public $Response;
private $Host;
private $DBname;
private $User;
private $Pass;
public $NumResults;
public function __construct($Sql, $type, $vars){
if($vars ==""){
$vars = array();
}
try{
$DB = $this->db_connect();
$DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$STH = $DB->prepare($Sql);
$doit = $STH->execute($vars);
$this->Result = $doit;
}
catch(PDOException $e){
echo $e->getMessage();
}
//find function to run
switch($type){
case 'select':
$this->select($STH);
break;
}
}
public function select($query){
$rows = $query->rowCount();
$this->NumResults = $rows;
while($row = $query->fetchObject()){
$this->Response[] = $row;
}
}
//create a separate function for connecting to DB. Private to only this class.
private function db_connect(){
$this->User = 'root';
$this->Pass = '';
$DBH = new PDO("mysql:host=localhost;dbname=divebaby", $this->User, $this->Pass);
return $DBH;
}
}
?>
然后,为了实际运行上面的语句,您只需输入以下代码:
$username = $_POST['username'];
$password = sha1($_POST['password']);
$location = $_POST['location'];
$email = $_POST['email'];
$name = $_POST['fname'] ."" . $_POST['surname'];
$getUser = new SqlIt("SELECT * FROM user WHERE username=?","select",array($username));
if($getUser){
echo 'Account name already exists';
}else{
$insertUser = new SqlIt("INSERT INTO user (username,password,location,email,name) VALUES (?,?,?,?,?)","insert",array($username,$password,$location,$email,$name));
if($insertUser){
echo 'Account created!';
}else{
echo 'Account not created.';
}
在您的一个页面的开头缺少,其中包含第一行setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);的代码