導航:首頁 > 編程語言 > phppdofetchall

phppdofetchall

發布時間:2023-06-03 12:27:47

A. 剛學php的小白,問一下這個查詢該怎麼寫

思路:

先查出上述的二維數據,然後遍歷查出的二維數組,根據每條的成員id查詢出user_name,添加到查詢出的二維數組中,最後在渲染輸出

示例:

//獲取資料庫實例
$dsn='mysql:dbname=test;host=127.0.0.1';
$user='root';
$password='';
try{
$db=newPDO($dsn,$user,$password,array(PDO::MYSQL_ATTR_INIT_COMMAND=>"setnamesutf8"));
}catch(PDOException$e){
echo'Connectionfailed:'.$e->getMessage();
}
//得到的二維數組
$data=[
[
'id'=>'1',
'range'=>'所在部門以及下級部門',
'功能項'=>'72',
],
[
'id'=>'1',
'range'=>'所在部門以及下級部門',
'功能項'=>'78,72',
],
[
'id'=>'10,7',
'range'=>'所在部門以及下級部門',
'功能項'=>'72,82',
],
];

//遍歷
foreach($dataas&$item){
$sth=$db->query('selectuser_namefromuserwheremember_idin('.$item['id'].')');
$user=$sth->fetchAll(PDO::FETCH_ASSOC);
$sth->debugDumpParams();
$item['member_name']=implode(',',array_column($user,'user_name'));
}
unset($item);

var_mp($data);

輸出

array(3){
[0]=>
array(4){
["id"]=>
string(1)"1"
["range"]=>
string(30)"所在部門以及下級部門"
["功能項"]=>
string(2)"72"
["member_name"]=>
string(6)"李明"
}
[1]=>
array(4){
["id"]=>
string(1)"1"
["range"]=>
string(30)"所在部門以及下級部門"
["功能項"]=>
string(5)"78,72"
["member_name"]=>
string(6)"李明"
}
[2]=>
array(4){
["id"]=>
string(4)"10,7"
["range"]=>
string(30)"所在部門以及下級部門"
["功能項"]=>
string(5)"72,82"
["member_name"]=>
string(13)"劉海,達明"
}
}

B. PHP7.0怎麼通過打開擴展功能和mysql相連

第一步:進入php源碼中的"ext/mysql"目錄下

第二步:在當前目錄下運行phpize命令:/usr/local/php524/bin/phpize

phpize的規則:去哪個目錄下運行phpize文件,那麼就會在該目錄下生成一個configure文件。

第三步:運行剛才生成的configure文件

命令: ./configure --with-php-config=/usr/local/php524/bin/php-config --with-mysql=/usr/local/mysql/

這里最關鍵的是通過--with-mysql參數告訴mysql客戶端的位置。這樣才能生成mysql.so。

實驗的時候,沒有加這個參數,結果錯誤:

./configure --with-php-config=/usr/local/php524/bin/php-config

第四步:編譯生成.so文件

第五步:配置php引擎載入該擴展。

補充一下:就是去php.ini文件中修改一下配置,載入mysql.so這個擴展(這個擴展文件要放到php指定的擴展目錄下面去)

第六步:測試php引擎是否成功載入該擴展編寫文件phpinfo.php,內容是:<?phpehco phpinfo();?>

運行後,可以看到有如下信息顯示:mysqlMySQLSupport enabledActive PersistentLinks 0

Active Links 0

Client API version 5.1.55

MYSQL_MODULE_TYPE no value

MYSQL_SOCKET /tmp/mysql.sock

MYSQL_INCLUDE no value

MYSQL_LIBS no value

通過這樣的方式可以確認,php引擎已經成功載入了mysql.so擴展。

第七步:已經生成的mysql.so。編寫php代碼測試是否能連接mysql。

C. php pdo 怎麼獲取查詢出來的結果集

php使用PDO抽象層獲取查詢結果,主要有三種方式:
(1)PDO::query()查詢。
看下面這段php代碼:
<?php //PDO::query()查詢
$res = $db->query('select * from user');
$res->setFetchMode(PDO::FETCH_NUM); //數字索引方式
while ($row = $res->fetch()){
print_r($row);
}
?>
(2)PDO->exec()處理sql
<?php //PDO->exec()處理sql
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$res = $db->exec("insert into user(id,name) values('','php點點通')");
echo $res;
?>
(3)PDO::prepare()預處理執行查詢
<?php //PDO::prepare()預處理執行查詢
$res = $db->prepare("select * from user");
$res->execute();
while ($row = $res->fetchAll()) {
print_r($row);
}
?>
setAttribute() 方法是設置屬性,常用參數如下:
PDO::CASE_LOWER -- 強制列名是小寫
PDO::CASE_NATURAL -- 列名按照原始的方式
PDO::CASE_UPPER -- 強制列名為大寫
setFetchMode方法來設置獲取結果集的返回值的類型,常用參數如下:
PDO::FETCH_ASSOC -- 關聯數組形式
PDO::FETCH_NUM -- 數字索引數組形式
PDO::FETCH_BOTH -- 兩者數組形式都有,這是默認的
PDO::FETCH_OBJ -- 按照對象的形式,類似於以前的 mysql_fetch_object()
對上面總結如下:
查詢操作主要是PDO::query()、PDO::exec()、PDO::prepare()。
PDO->query() — 處理一條SQL語句,並返回一個「PDOStatement」
PDO->exec() — 處理一條SQL語句,並返回所影響的條目數
PDO::prepare()主要是預處理操作,需要通過$rs->execute()來執行預處理裡面的SQL語句
最後介紹兩個常用的函數:
(1)fetchColumn()獲取指定記錄里一個欄位結果,默認是第一個欄位!
<?php
$res = $db->query('select * from user');
//獲取指定記錄里第二個欄位結果
$col = $res->fetchColumn(1);
echo $col;
?>
(2)fetchAll(),從一個結果集中獲取數據,然後存放在關聯數組中
<?php
$res = $db->query('select * from user');
$res_arr =$res->fetchAll();
print_r($res_arr);
?>

D. 請教高手:php實現n叉樹遍歷

要構建的無限分類的模型. 電子產品是最大的分類.家用電器 ,數碼產品是其子分類.可以看到子分類是被父分類包含起來的.每個分類都有左右 兩個節點編號分別是1、2、3.....

根據上面的圖mysql中建立表和插入數據

CREATE TABLE `proct_categories` (

`id` MEDIUMINT( 8 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,`name` VARCHAR( 20 ) NOT NULL ,

`left_node` MEDIUMINT( 8 ) NOT NULL ,

`right_node` MEDIUMINT( 8 ) NOT NULL

) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;INSERT INTO `proct_categories` (`id`, `name`, `left_node`, `right_node`) VALUES(1, '電子產品', 1, 20),

(2, '家用電器', 2, 9),

(3, '電視機', 3, 4),

(4, '電冰箱', 5, 6),

(5, '空調', 7, 8),

(6, '數碼產品', 10, 19),

(7, '電腦', 11, 18),

(8, '台式電腦', 12, 13),

(9, '筆記本電腦', 14, 15),

(10, '平板電腦', 16, 17);

表結構如下:

下面是PHP的實例代碼:

1、獲取所有節點

<?php

$pdo = new PDO(

'mysql:host=localhost;dbname=test',

'root',

''

);

$pdo->exec("SET NAMES UTF8");

$stmt = $pdo->prepare("SELECT c.name FROM proct_categories as c, proct_categories as pWHERE c.left_node BETWEEN p.left_node AND p.right_nodeAND p.name='電子產品' ORDER BY c.left_node");$stmt->execute();

$rs=$stmt->fetchAll(PDO::FETCH_ASSOC);

foreach($rs as $v){

echo $v['name'].'<br />';

}

輸出:

電子產品

家用電器

電視機

電冰箱

空調

數碼產品

電腦

台式電腦

筆記本電腦

平板電腦

2、 獲取某個父節點以及其所有子節點

<?php

$pdo = new PDO(

'mysql:host=localhost;dbname=test',

'root',

''

);

$pdo->exec("SET NAMES UTF8");

$stmt = $pdo->prepare("SELECT c.name FROM proct_categories as c, proct_categories as pWHERE c.left_node BETWEEN p.left_node AND p.right_nodeAND p.name='數碼產品' ORDER BY c.left_node");$stmt->execute();

$rs=$stmt->fetchAll(PDO::FETCH_ASSOC);

foreach($rs as $v){

echo $v['name'].'<br />';

}

輸出:

數碼產品

電腦

台式電腦

筆記本電腦

平板電腦

3、獲取所有的葉子節點

<?php

$pdo = new PDO(

'mysql:host=localhost;dbname=test',

'root',

''

);

$pdo->exec("SET NAMES UTF8");

$stmt = $pdo->prepare("SELECT name FROM proct_categories where right_node-left_node=1");$stmt->execute();

$rs=$stmt->fetchAll(PDO::FETCH_ASSOC);

foreach($rs as $v){

echo $v['name'].'<br />';

}

輸出:

電視機

電冰箱

空調

台式電腦

筆記本電腦

平板電腦

4、獲取某個子節點及其所有父節點

<?php

$pdo = new PDO(

'mysql:host=localhost;dbname=test',

'root',

''

);

$pdo->exec("SET NAMES UTF8");

$stmt = $pdo->prepare("SELECT p.name FROM proct_categories AS c, proct_categories AS p WHERE c.left_node BETWEEN p.left_node AND p.right_node AND c.name = '平板電腦' ORDER BY p.left_node");$stmt->execute();

$rs=$stmt->fetchAll(PDO::FETCH_ASSOC);

foreach($rs as $v){

echo $v['name'].'<br />';

}

輸出:

電子產品

數碼產品

電腦

平板電腦

5、獲取所有節點極其所處的層級

<?php

$pdo = new PDO(

'mysql:host=localhost;dbname=test',

'root',

''

);

$pdo->exec("SET NAMES UTF8");

$stmt = $pdo->prepare("SELECT c.name, (COUNT(p.name) - 1) AS level FROM proct_categories AS c, proct_categories AS p WHERE c.left_node BETWEEN p.left_node AND p.right_node GROUP BY c.name ORDER BY c.left_node");$stmt->execute();

$rs=$stmt->fetchAll(PDO::FETCH_ASSOC);

var_mp($rs);

echo '<br />';

foreach($rs as $v){

echo $v['name'].' level:'.$v['level'].'<br />';}

輸出:

電子產品 level:0

家用電器 level:1

電視機 level:2

電冰箱 level:2

空調 level:2

數碼產品 level:2

電腦 level:2

台式電腦 level:3

筆記本電腦 level:3

平板電腦 level:3

6、獲取某個節點的層級

<?php

$pdo = new PDO(

'mysql:host=localhost;dbname=test',

'root',

''

);

$pdo->exec("SET NAMES UTF8");

$stmt = $pdo->prepare("SELECT c.name, (COUNT(p.name) - 1) AS level FROM proct_categories AS c, proct_categories AS p WHERE c.left_node BETWEEN p.left_node AND p.right_node and c.name='平板電腦' GROUP BY c.name ORDER BY c.left_node");$stmt->execute();

$rs=$stmt->fetchAll(PDO::FETCH_ASSOC);

var_mp($rs);

echo '<br />';

foreach($rs as $v){

echo $v['name'].' level:'.$v['level'].'<br />';}

輸出:

平板電腦 level:3

7、在某個節點後平行的插入一個節點

<?php

$pdo = new PDO(

'mysql:host=localhost;dbname=test',

'root',

''

);

$pdo->exec("SET NAMES UTF8");

function addNode($left_node,$new_node){

global $pdo;

$stmt = $pdo->prepare("SELECT right_node FROM proct_categories WHERE name = '$left_node'");$stmt->execute();

$rs=$stmt->fetch(PDO::FETCH_ASSOC);

$right_node=$rs['right_node'];

$pdo->exec("UPDATE proct_categories SET right_node = right_node + 2 WHERE right_node > $right_node");$pdo->exec("UPDATE proct_categories SET left_node = left_node + 2 WHERE left_node > $right_node");$pdo->exec("INSERT INTO proct_categories(name, left_node, right_node) VALUES('$new_node', $right_node + 1, $right_node + 2)");}

addNode('家用電器','辦公用品');

完成之後表結構如下:

8、刪除某個節點及其所有子節點

<?php

$pdo = new PDO(

'mysql:host=localhost;dbname=test',

'root',

''

);

$pdo->exec("SET NAMES UTF8");

function deleteNode($node_name){

global $pdo;

$stmt = $pdo->prepare("SELECT left_node,right_node, right_node - left_node + 1 as width FROM proct_categories WHERE name ='$node_name'");$stmt->execute();

$rs=$stmt->fetch(PDO::FETCH_ASSOC);

$left_node=$rs['left_node'];

$right_node=$rs['right_node'];

$width=$rs['width'];

$pdo->exec("DELETE FROM proct_categories WHERE left_node BETWEEN $left_node AND $right_node");$pdo->exec("UPDATE proct_categories SET right_node = right_node - $width WHERE right_node > $right_node");$pdo->exec("UPDATE proct_categories SET left_node = left_node - $width WHERE left_node > $right_node");}

deleteNode('數碼產品');

完成之後表結構如下:

可以看到用多叉樹的方式構建無限分類,查詢的時候是非常簡便的.但是在插入新的節點和刪除節點時就比較麻煩了.

E. php 如何從數據里選擇所需要信息然後生成csv文件自動保存在指定的路徑(不提示保存,自動)

命令行模式下,或者web模式下保存的路徑在伺服器中,可以達到你的要求(有該路徑的許可權即可)

如果是在web模式下,不提示直接保存到訪客的電腦中的某個位置,是不可以的。

web模式保存到客戶端,只能通過下載,由用戶指定,或保存到默認的下載目錄。

以下是代碼示例:

$dsn='mysql:dbname=testdb;host=127.0.0.1';
$user='dbuser';
$password='dbpass';

//連接資料庫pdo
try{
$dbh=newPDO($dsn,$user,$password,array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SETNAMES'UTF8'"));
}catch(PDOException$e){
echo'Connectionfailed:'.$e->getMessage();exit;
}

//讀取數據,具體sql你根據情況修改
$stat=$dbh->prepare('SELECT*FROM`table`WHERE`id`>0LIMIT100;');
$stat->execute();
$result=$stat->fetchAll(PDO::FETCH_ASSOC);

//創建csv文件並打開文件指針
$filepath='file.csv';
$fp=fopen($filepath,'w');

//寫入數據
foreach($resultas$i=>$row){
//寫入標題行
if($i==0){
fputcsv($fp,array_keys($row));
}
fputcsv($fp,$row);
}

//關閉文件指針
fclose($fp);

//把文件輸出到下載
$file=fopen($filepath,"r");//打開文件
$size=filesize($filepath);
Header("Content-type:application/octet-stream");
Header("Accept-Ranges:bytes");
Header("Accept-Length:".$size);
Header("Content-Disposition:attachment;filename=download.csv");
echofread($file,$size);
fclose($file);

相關知識點:

PHP: fputcsv

PHP:PDO

資料庫查詢的時候只返回列名,防止列出現重復,csv里會有重復的數據

閱讀全文

與phppdofetchall相關的資料

熱點內容
2023台灣同性電影 瀏覽:846
賭怪電影完整版 瀏覽:35
10部真刀實槍的法國電影 瀏覽:128
如何進入正式服的伺服器 瀏覽:581
像野浪花一樣的電影有哪些 瀏覽:917
0855影視大全電視劇 瀏覽:54
f0fp5m9z7 瀏覽:793
8251單片機 瀏覽:880
java程序員學習python 瀏覽:525
喝奶水的電影 瀏覽:438
季璃惡夫記 瀏覽:146
那些辭職考公務員的程序員 瀏覽:664
安卓表格布局怎麼弄列 瀏覽:933
80年代香港殺手電筒影大全集 瀏覽:913
《熱情的鄰居》李彩 瀏覽:998
不收費的小電影在哪裡看 瀏覽:609
適合雙人看的愛情片5g視頻 瀏覽:587
安卓中控怎麼安裝應用 瀏覽:83
電影大全鬼片免費收看 瀏覽:148
kanxv5. com/6/ index.php/ 瀏覽:585