什么是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从控制台更新,但它仍然会显示它不应该显示的记录。
我正在开发一个网站,看起来不错。然后我打开调试以查看是否有任何错误,并收到以下消息:
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) 我有以下代码片段:
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) 我正在创建一个这样的 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)
用户名/密码和数据库名称都正确。
非常感谢。
我正在尝试计算查询返回的行数,我这样做:
$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)
但我始终一无所获。只是空白。这样做的正确方法是什么?
我有一个非常常见的问题,但似乎无法找到一个好的答案。
我需要从表中获取一页的行数,以及足够的信息来对这些数据进行分页。所以总的来说,我需要对总行数进行非常粗略的估计(通常我需要知道的是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。
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) 我一直在环顾四周,甚至在网站上,但我无法在 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) 我在 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 服务器;
连接本身很有魅力,但是当我尝试创建数据库时,因为它尚不存在,我收到此错误:
带有消息“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 包装器的实例
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)