标签: pdo

fetchall (PDO) 的替代方案?

什么是fetchall实时循环的替代方案?

考虑一下:

$query = $db->prepare("SELECT * FROM record WHERE status = 0");
$query->execute();
$Record = $query->fetchall(PDO::FETCH_ASSOC);

foreach ($Record as $row) {
 echo $row['name'];
 sleep(5)
}
Run Code Online (Sandbox Code Playgroud)

在它循环和echo'ing 时,我status = 1从控制台更新,但它仍然会显示它不应该显示的记录。

php mysql pdo

0
推荐指数
1
解决办法
2103
查看次数

为什么我得到“未定义的偏移量:0”?

我正在开发一个网站,看起来不错。然后我打开调试以查看是否有任何错误,并收到以下消息:

Notice: Undefined offset: 0 in I:\path\to\file\MyFile.class.php on line 105
Run Code Online (Sandbox Code Playgroud)

在该行中,您将找到以下代码:

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $result[0]; // line 105
Run Code Online (Sandbox Code Playgroud)

如果我做一个print_r(result)我得到以下结果:

Array (
    [0] => Array (
        [id] => 3721
        [parentID] =>
    )
)
Array (
) 
Run Code Online (Sandbox Code Playgroud)

如您所见,结果包含两个数组。第一个有数据,第二个没有数据。我从未见过print_r像这样输出两个数组。我猜这是第二个给我带来问题的。

谁能告诉我为什么第二个阵列潜入?

VAR转储

array
  0 => 
    array
      'id' => string '3721' (length=4)
      'parentID' => null
array
  empty
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

0
推荐指数
1
解决办法
1604
查看次数

没有错误消息的 PDO 问题

我有以下代码片段:

error_reporting(E_ALL);
$hostname = "localhost";
$username = "user";
$password = "password";
try {
    $db = new PDO("mysql:host=$hostname;dbname=DBNAME", $username, $password);
    echo "connected...<br/>\n";flush();
    $sql = "SELECT COLA, COLB FROM TABLEA LIMIT 10";
    echo "query:$sql--<br/>\n";flush();
    $stmt = $dbh->query($sql);
    echo "statement:<pre>";print_r($stmt);echo "</pre>\nfetching...<br/>\n";flush();
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    if ($result === true) {
        echo "result is true<br/>\n";flush();
    }
    else if ($result === false) {
        echo "result is false<br/>\n";flush();
    }
    else {
        echo "what?<br/>\n";flush();
    }
    foreach ($result as $key=>$val) {
        echo "key:$key - val:$val--<br/>\n";flush();
    }
    echo "done";
    $dbh …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

0
推荐指数
1
解决办法
1393
查看次数

PDO 对象未正确构造

我正在创建一个这样的 PDO 对象:

try {                                      
   $dbh = new PDO( "mysql:host=$host;dbname=$db_name" , $user, $passwd );     
} catch( PDOException $e ) {
   echo 'Caught exception: ', $e->getMessage(), "\n";
   die();
}
Run Code Online (Sandbox Code Playgroud)

但是没有错误,没有异常,并且 PDO 对象中没有任何内容:

var_dump( $dbh );
Run Code Online (Sandbox Code Playgroud)

输出:

object(PDO)#5 (0) {
}
Run Code Online (Sandbox Code Playgroud)

用户名/密码和数据库名称都正确。

非常感谢。

php mysql pdo

0
推荐指数
1
解决办法
1908
查看次数

为什么 PDO fetchColumn() 在这里不起作用

我正在尝试计算查询返回的行数,我这样做:

$what = 'Norman';
$stmt = $conn->prepare('select names as names from names where names = :what');
$stmt->bindParam('what', $what);
$stmt->execute();
$rows = $stmt->fetchColumn();

echo 'Rows found '.$rows;

$stmt->setFetchMode(PDO::FETCH_ASSOC);

while($row = $stmt->fetch())
{  
    echo $row['names'] . "<br>";
}
Run Code Online (Sandbox Code Playgroud)

但我始终一无所获。只是空白。这样做的正确方法是什么?

php pdo

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

分页/粗略估计总行数的最有效方法

我有一个非常常见的问题,但似乎无法找到一个好的答案。

我需要从表中获取一页的行数,以及足够的信息来对这些数据进行分页。所以总的来说,我需要对总行数进行非常粗略的估计(通常我需要知道的是ceil(count()/50))。

所以count()真的是矫枉过正。而且我已经有一个SELECT * FROM table LIMIT 0, 50运行,所以如果它可以附加到这个命令就更好了。

我听说过SQL_CALC_FOUND_ROWS。但我也听说它并不比count自己做特别有效率。“不幸的是,使用 SQL_CALC_FOUND_ROWS 会带来破坏可能发生的任何 LIMIT 优化的恶劣后果”。

所以,总而言之,我有点认为使用 MySQL 的行估计是要走的路。但我不知道该怎么做。或者这个估计会有多低。

注意1:在我的情况下,我使用的大多数表每天只更新几次,而不是一直更新。注 2:我在 php 中使用 PDO。

php mysql pagination pdo

0
推荐指数
1
解决办法
858
查看次数

Php PDO rowCount() return wrong result

I have a function for getting path in a tree structure data.

According to my table in DB, root should get no result when I query sub_id='root_id'

When I just pass the root the rowCount return correct result which is 0. However when I pass a node from lower rank(3rd), in the end of the recursive which is root, rowCount return 1?

PS

I use Mysql as DB

This is my table

main_id | sub_id
----------------    
    1   |    2 …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

0
推荐指数
1
解决办法
4838
查看次数

PDO 中的表单以更新数据

我一直在环顾四周,甚至在网站上,但我无法在 PDO 中找到正确的语法来更新数据,例如用户配置文件的数据。

你能给我一个 html 表单的实际例子吗?我知道也许我问了这么多,但我无法让它发挥作用。

我附上到目前为止可以做的事情,但不能工作。

if(isset($_POST['submit'])) {
    $email      = $_POST['email'];
    $location       = $_POST['location'];
    $id       = $_SESSION['memberID'];

    $stmt = $db->prepare("UPDATE `members` SET `email` = :email, `location` = :location WHERE `memberID` = :id");

    $stmt->bindParam(":email", $email, PDO::PARAM_STR);
    $stmt->bindParam(":location", $location, PDO::PARAM_STR);
    $stmt->bindParam(":id", $_SESSION['memberID'], PDO::PARAM_STR);

    $stmt->execute(array(':email' => $_POST['email'], ':location' => $_POST['location'], ':id' => $id));
}
Run Code Online (Sandbox Code Playgroud)

和,

<form role="form" method="POST" action="<?php $_PHP_SELF ?>">
<div class="form-group">
<label class="control-label">Email</label>
<input type="text" value="<?php echo $_SESSION['email'] ?>" name="email" id="email" class="form-control"/>
</div>
<div class="form-group">
<label class="control-label">Location</label>
<input type="text" value="<?php …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

0
推荐指数
1
解决办法
5610
查看次数

访问另一个文件中的 PHP PDO 对象

我在 generic.php 中有一个名为 generic 的类。我有一个 signup.php 文件,它必须执行 SQL 查询。但是,我无法访问在 generic.php 中创建的 PDO 对象,该对象存储在变量 $db 中。

泛型类如下所示:

class Generic {
    public $db;

    public function connect_database() {
        define('USER', 'user');
        define('PASSWORD', 'password');

        // Database connection
        try {
            $connection_string = 'mysql:host=localhost;dbname=mydb;charset=utf8';
            $connection_array = array(
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
            );

            $db = new PDO($connection_string, USER, PASSWORD, $connection_array);
            echo 'Database connection established';
        }
        catch(PDOException $e) {
            $db = null;
        }
    }   
}
Run Code Online (Sandbox Code Playgroud)

我尝试访问 $db 变量(其中存储了 PDO 对象),但我收到一条错误消息,指出Call to a member function prepare() on …

php mysql oop pdo

0
推荐指数
1
解决办法
2445
查看次数

用户 'username'@'%' 的 PDO 访问被拒绝

我需要使用 php 页面连接到远程 mysql 服务器;
连接本身很有魅力,但是当我尝试创建数据库时,因为它尚不存在,我收到此错误:

带有消息“SQLSTATE[42000]”的异常“PDOException”:语法错误或访问冲突:1044 用户“[myusername]”@“%”对 [myurl]/php/db_manager.php 中的数据库“[mydbname]”的访问被拒绝:76

如您所见,我对“%”的访问被拒绝。
现在:什么是“%”?

此外:

主文件

private function createDB() {
if($this->cm->update("CREATE DATABASE IF NOT EXISTS " . $this->dbName . " DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;", array())) { // Error here
  $this->cm->update("USE " . $this->dbName . ";", array());
  return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)

$this->cm 是一个正确初始化的 PDO 包装器的实例

PDO 包装文件

public function update($query, $values) 
try{
        $sql = $this->db->prepare($query);
        $sql->execute($values);
        return true;
    } catch(PDOException $e) {
        $this->l->error($e); // <- Error here
        return false; …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

0
推荐指数
1
解决办法
5723
查看次数

标签 统计

pdo ×10

php ×10

mysql ×9

oop ×1

pagination ×1