相关疑难解决方法(0)

PDO:在非对象上调用成员函数fetch()?

我只是尝试PDO并且我得到了这个错误,致命错误:在非对象上调用成员函数fetch(),但是它不是已经在$ this-> db对象上了吗?

class shoutbox {

    private $db;

    function __construct($dbname, $username, $password, $host = "localhost" ) 
    { # db conections
        try {
            $this->db = new PDO("mysql:host=".$hostname.";dbname=".$dbname, $username, $password);
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }

    function getShouts()
    {
        $sql_shouts = $this->db->query('SELECT shoutid, message, pmuserid, ipadress, time FROM shouts WHERE pmuserid == 0');

        return $sql_shouts->fetch(PDO::FETCH_OBJ);

    }

}
Run Code Online (Sandbox Code Playgroud)

php pdo

9
推荐指数
2
解决办法
4万
查看次数

要在MySQL数据库中插入的PHP PDO代码失败

我在解决一些简单的PHP代码以在MySQL表中插入记录时遇到困难.

直接输入WAMP的代码工作正常:

INSERT INTO `users` (`userName`,`userEmail`) VALUES ('orange','orange@gmail.com')
Run Code Online (Sandbox Code Playgroud)

这个PHP代码不起作用:

<?php
    $dbHost="localhost";
    $dbName="project";
    $dbUser="admin";
    $dbPassword="abcd";
    $dbh=new PDO("mysql:host=$dbHost;dbName=$dbName", $dbUser, $dbPassword);
    print_r($dbh);
    echo "</br>";
    print_r($dbh->errorInfo());

    $query=$dbh->prepare("INSERT INTO users (userName, userEmail) VALUES (?,?)");
    echo "</br>";
    print_r(var_dump($query->errorInfo()));
    echo "</br>";
    print_r($query->errorCode());
    echo "</br>";
    print_r($dbh->errorInfo());

    $query->bindValue(1, 'apple');
    echo "</br>";
    print_r(var_dump($query->errorInfo()));
    echo "</br>";
    print_r($query->errorCode());
    echo "</br>";
    print_r($dbh->errorInfo());

    $query->bindValue(2, 'apple@gmail.com');
    echo "</br>";
    print_r(var_dump($query->errorInfo()));
    echo "</br>";
    print_r($query->errorCode());
    echo "</br>";
    print_r($dbh->errorInfo());

    $inserted=$query->execute(); //True if succesful, False if not.
    echo "</br>";
    print_r(var_dump($query->errorInfo()));
    echo "</br>";
    print_r($query->errorCode());
    echo "</br>";
    print_r($dbh->errorInfo());
    echo "</br>";
    if ($inserted){print_r("true");}else{print_r("false");}; …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

8
推荐指数
1
解决办法
3624
查看次数

PDO准备默默失败

我正在尝试使用PHP session_set_save_handler,我想使用PDO连接来存储会话数据.

我有这个函数作为写操作的回调:

function _write($id, $data) {
    logger('_WRITE ' . $id . ' ' . $data);
    try {
        $access = time();
        $sql = 'REPLACE INTO sessions SET id=:id, access=:access, data=:data';
        logger('This is the last line in this function that appears in the log.');
        $stmt = $GLOBALS['db']->prepare($sql);
        logger('This never gets logged! :(');
        $stmt->bindParam(':id', $id, PDO::PARAM_STR);
        $stmt->bindParam(':access', $access, PDO::PARAM_INT);
        $stmt->bindParam(':data', $data, PDO::PARAM_STR);
        $stmt->execute();
        $stmt->closeCursor();
        return true;
    } catch (PDOException $e) {
        logger('This is never executed.');
        logger($e->getTraceAsString());
    }
}
Run Code Online (Sandbox Code Playgroud)

前两条日志消息总是显示出来,但是后面的第三条消息永远$stmt = …

php session pdo session-set-save-handler

7
推荐指数
1
解决办法
3088
查看次数

PDO没有插入 - 没有错误

我不明白为什么这些行不起作用:

  $host = 'localhost';
  $dbname='mydbname';
  $login='mylogin';
  $pwd='mypwd';
  $datex = date('Y/m/d H:i:s');
  $nomx = 'jrmy';
  $numx = '007';
  try {
    $bdd = new PDO('mysql:host='.$host.';dbname='.$dbname, $login, $pwd);
  }
  catch(Exception $e) {
    die('Erreur : '.$e->getMessage());
  }
  $bdd->exec('INSERT INTO dossiers(date, nom, numero, disp) VALUES(\''.$datex.'\', \''.$nomx.'\', \''.$numx.'\', \'Y\')');
  $id = $bdd->lastInsertId();
  $bdd= null;
  echo 'id: '.$id;
Run Code Online (Sandbox Code Playgroud)

披露:该脚本在我的apache服务器上工作,因为我在IIS服务器上安装了我的脚本,它停止工作...

并且查询功能完美运行...查询确定,插入NO

编辑:谢谢大家!真!

php mysql database pdo

7
推荐指数
1
解决办法
2万
查看次数

使用MySQL调试PDO准备的查询

我正在进行从mysql_*调用到使用PDO调用的更改,并且无法在开发新代码时弄清楚如何调试我的实际SQL.

mysql_*调用下我可以在PHP函数中编写一些SQL,并且可以echo使用实际的SQL来查看处理器正在使用的内容.

我无法在PDO库中找到这样的野兽.debugDumpParams看起来应该如此,但它不会吐回绑定语句.

我遇到的问题的例子:

  1. 在我的第一次尝试中,我绑定了一个字符串,并在SQL语句中包含引号,尽管绑定了一个data_type字符串 - 它只是通过fluke我尝试从语句中删除引号; 调试会让我看到那里有一个重复的引用.

  2. 我将一些代码从一个项目复制到另一个项目,并意外忘记更正数据库名称.当然,SQL失败了,因为其他数据库中不存在这些表.但该程序刚刚返回了正确的错误结果.在PHP日志或MySQL日志中没有任何地方或任何地方,我得到一个提示,表我不在寻找它的地方.

那么,其他人如何为PDO SQL调用进行调试呢?我错过了什么?:)

php mysql debugging pdo

6
推荐指数
1
解决办法
1399
查看次数

MySql PDO与数据库的连接

我正在学习PDO,我感到非常困惑,我在下面有这段代码,所有看起来都对我,但是我得到这个错误代码,我不知道我要做什么来解决它,请帮助我:

<?php
$hostname='localhost';
$username='root';
$password='';

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=stickercollections",$username,$password);
    echo 'Connected to Database<br/>';

    $sql = "SELECT * FROM stickercollections";
foreach ($dbh->query($sql) as $row)
    {
    echo $row["collection_brand"] ." - ". $row["collection_year"] ."<br/>";
    }


    $dbh = null;
    }
catch(PDOException $e)
    {
    echo $e->getMessage();
    }
?> 
Run Code Online (Sandbox Code Playgroud)

错误代码 : Invalid argument supplied for foreach() in /Applications/XAMPP/xamppfiles/htdocs/GOTSWAPMAIN/index.php on line 11

php sql pdo

6
推荐指数
1
解决办法
7万
查看次数

PHP PDO:更新查询不起作用且没有错误

我有一个非常简单的 UPDATE 查询,当我在 PHPMyAdmin 中执行它时它可以工作(所以它不是 SQL 语法错误)。但是,当我尝试使用 PHP PDO 执行查询时,没有显示任何错误,并且没有一行受到查询的影响。

我有错误报告设置是这样的:PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION。但没有显示错误。我的 PHP 代码如下所示:

try {
    $sql = "UPDATE user 
            SET username = :username, 
                activation_token = :activation_token, 
                activation_date_time = :activation_date_time, 
                activation_status  = :activation_status  
            WHERE activation_token = :current_activation_token";
    $stmt = $dbh->get_instance()->prepare($sql); 

    $stmt->bindParam(':username', $username, PDO::PARAM_STR);       
    $stmt->bindParam(':activation_token', $empty_activation_token, PDO::PARAM_STR);    
    $stmt->bindParam(':activation_date_time', $datetime, PDO::PARAM_STR);
    $stmt->bindParam(':activation_status', $active_status, PDO::PARAM_STR); 
    $stmt->bindParam(':current_activation_token', $activation_token, PDO::PARAM_STR);
    $stmt->execute();

    echo 'username: ' . $username;
} 
catch(PDOException $e) {
    echo $e;
} 
Run Code Online (Sandbox Code Playgroud)

我还检查了我是否以某种方式使用了保留关键字或类似的东西,但我很确定事实并非如此。为什么这不起作用?

php mysql pdo

6
推荐指数
0
解决办法
1764
查看次数

使用包含空值的数组执行PDO

我需要更新数据库,并execute()通过将数组作为参数使用PDO的方法。

这个想法是当我尝试插入一个NULL值时给我一个错误...

这是发送查询/参数的示例:

生成的查询:

UPDATE table SET name=?, id_extra1=?, id_extra2=? WHERE id_something=?
Run Code Online (Sandbox Code Playgroud)

参数数组:

array (size=8)
  'name' => string 'testing' (length=6)
  'id_extra1' => string '2' (length=1)
  'id_extra2' => null
  'id_something' => string '1958' (length=4)
Run Code Online (Sandbox Code Playgroud)

所以NULL值是id_extra2

在代码中,id_extra2我遇到了这样的情况(想法是我有一个ID,或者为0,然后必须使用来更新DB值NULL

if ($_POST['id_extra2']==0) {
    $_POST['id_extra2'] = null;
}
Run Code Online (Sandbox Code Playgroud)

我试着设置$_POST['id_extra2']''NULL'null',但它仍然没有工作...

任何想法表示赞赏!谢谢!

php mysql null pdo

5
推荐指数
1
解决办法
6169
查看次数

如何选择名称中带有 - 连字符的表名

我无法弄清楚这一点,并且没有搜索产生结果。

查询:

$QUERY = "SELECT rp.perm_id 
          FROM ac_br_user-roles AS ur 
          JOIN ac_br_roles-permissions AS rp ON rp.role_id = ur.role_id 
          WHERE ur.user_id = ?";
Run Code Online (Sandbox Code Playgroud)

我尝试使用``反引号''单引号和{}大括号将表名和\反斜杠括在 -处以转义-连字符,但无济于事。

错误:

PDOException:SQLSTATE [42601]:语法错误:7 错误:“-”第 2 行或附近的语法错误:FROM ac_br_user-roles AS ur ^ in

或“位于或附近”无论我在第 2 行尝试使用的转义字符

更新

$QUERY = 'SELECT rp.perm_id 
          FROM `ac_br_user-roles` AS ur 
          JOIN `ac_br_roles-permissions` AS rp ON rp.role_id = ur.role_id 
          WHERE ur.user_id = ?';
Run Code Online (Sandbox Code Playgroud)

" LINE 2: FROMPDOException:SQLSTATE [42601]:语法错误:7 错误:“ ac_br_user-roles` AS …

php postgresql pdo

5
推荐指数
0
解决办法
7302
查看次数

PHP PDO准备插入 - 不插入数据并且不显示错误

这个问题让我发疯,我尝试了一切.是不是给我任何错误,但它也没有向数据库插入任何内容.数据库连接很好,应该没有拼写错误.请看一下,看看你是否能找到问题:

$err = array();

if (isset($_POST['submit'])) {

    $ip = gethostbyname($_SERVER['REMOTE_ADDR']);
    $date = "2012-02-02 02:02:02"; //Example
    $uploader_name = $_POST['uploader_name'];

    // Validation happens here...


    if (empty($err)) {

        $host = "host";
        $dbname = "db";
        $user = "user";
        $pass = "pass";

        try {
            $dbh = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);  

            $sql = "INSERT INTO `table` (`ip`, `date`, `uploader_name`) 
                    VALUES (:ip, :date, :uploader_name)";
            $stmt = $dbh->prepare($sql);

            # the data we want to insert  
            $params = array(
                ':ip' => $ip,
                ':date' => $date,
                ':uploader_name' => $uploader_name
            ); …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo insert

4
推荐指数
1
解决办法
6948
查看次数