台灣最大程式設計社群網站
線上人數
1175
 
會員總數:241735
討論主題:187049
歡迎您免費加入會員
討論區列表 >> PHP >> PDO取得表單欄位問題
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
PDO取得表單欄位問題
價值 : 50 QP  點閱數:114 回應數:2

樓主

迷路
高級專家
9480 126
6035 1587
發送站內信

捐贈 VP 給 迷路
需要對所有資料庫的所有資料表的所有欄位進行搜尋
原本是用mysqli的方式連線資料庫,可以正常搜尋
但是最近製作的站已經開始嘗試用PDO來連線,這個卻出現問題

資料庫類型、路徑、使用者帳密都有先define正確值
再執行 $sql = "SHOW COLUMNS FROM `".$rowsT["Name"]."`"; 這段SQL式時發生錯誤,訊息如下:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected'

我試過將echo出來的SQL式直接在資料庫中執行,是可以得到正確值得
也試過換成 $sql = "SHOW COLUMNS FROM `".$rowsT["Name"]."` FROM `".$rowsT["Name"]."`";
或是 $sql = "SHOW FIELDS FROM `".$rowsT["Name"]."`";
通通都不行

Google上有人說是 $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); 的關係,將false改成true就行了
但是實測仍是不行,而且這個設定如果改掉,不就等於關掉PDO防止注入攻擊的防護嗎?

搜尋相關Tags的文章: [ PDO ] , [ SHOW COLUMNS ] ,
本篇文章發表於2017-12-27 12:02
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
那個錯誤訊息很明白的告訴你。
「未指定資料庫」

由於你是採用公用命令的情況。
且你也未做特別指定要使用哪個資料庫的情況下。

在有些需要讀取資料庫內表的命令,你是需要特別去指定資料庫名稱。

如你的資料庫名為mydb。而要讀取其table中的表時。
你需要用 mydb.table 這樣的方式來做下達命令的處理。
本篇文章回覆於2017-12-27 14:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

迷路
捐贈 VP 給 迷路 檢舉此回應
我犯蠢了
之前測試`資料庫`.`資料表`時只注意到錯誤訊息相同
沒注意到行數不同,有錯的是下一個SQL式
都加上後就能正常運行了
本篇文章回覆於2017-12-27 18:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.