【问题标题】:php script echoing part of the php instead of what intended [duplicate]php脚本回显部分php而不是预期[重复]
【发布时间】:2012-07-27 18:04:30
【问题描述】:

我在创建用于将实例插入数据库的 php 脚本时遇到问题,但是我得到了一个微不足道的输出,但我不知道如何修复它。代码是:

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


?>

我希望输出类似于“Account created”。相反,我收到此错误的输出:

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $用户名 = $_POST['用户名']; $password = sha1($_POST['password']);
$location = %_POST['location']; $email = $_POST['email']; $名称= $_POST['fname'] 。 “”。 $_POST['姓氏']; $支票= $pdo->prepare('SELECT * FROM user WHERE username=?');
$check->bindValue(1, $username); $check->执行();
if($check->fetch(PDO::FETCH_OBJ)){ echo "账户名已经存在"; } else{ $stmt = $pdo->prepare('INSERT INTO user(username, password, 位置,电子邮件,姓名)值(:用户名,:密码,:位置,:电子邮件, :姓名)'); $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 "账户创建"; } else{ echo "账户 无法创建"; } } $pdo = null; }catch(PDOException $e){ echo $e->getMessage(); } ?>

这个脚本出了什么问题导致这个?

【问题讨论】:

  • 您的服务器是否启用了 PHP?如果你访问一个只包含 &lt;?php phpinfo(); ?&gt; 的 PHP 文件会发生什么?
  • 另外,检查您过去的问题并接受答案。你的接受率只有 14%,而且非常低。因此,有些人可能不会给您答案。
  • @LiamWarnes Chewckif PDO 是否启用
  • @David 我认为是 phpinfo() 给了我一堆显示版本信息等的表格
  • 看不到这将如何导致 php 代码被输出,但您似乎在$location = %_POST['location']; 有错字,用 % 而不是 $

标签: php mysql pdo


【解决方案1】:

获得该输出的唯一方法是编写:

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

作为:

$pdo?>setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

错了。

【讨论】:

  • 也许可以,但是代码块是直接从notepad++复制的,所以不是这样
  • 您发布的输出是您在浏览器中看到的,还是原始字符串响应(例如,来自视图源视图)?
【解决方案2】:

您在%_POST['location'] 上有一个% 而不是$

建议: 此外,我强烈建议将 PDO 函数包装到一个类中。以下是我个人在每个项目中使用的内容:

将此保存到它自己的文件中(例如:sql.class.php)

<?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.';
       }

【讨论】:

    【解决方案3】:

    在您的一个页面的开头缺少&lt;?php,其中包含第一行setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);的代码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-29
      • 2019-06-27
      • 2014-09-11
      • 2013-01-16
      • 2017-02-09
      • 2016-02-10
      • 1970-01-01
      • 2019-10-08
      相关资源
      最近更新 更多