PHPで簡単な編集フォームを作成しています。
アドバイスを頂ければ幸いです。
前提・実現したいこと
PHPでMySQLのSELECT、UPDATEを、それぞれ関数化して呼び出す部分を作りたい。
発生している問題・エラーメッセージ
var_dumpした結果の内容がわかっておりません
該当部分(後述のUPDATEのメソッド経由でvar_dump結果の一部)
["info"]=> string(40) "Rows matched: 1 Changed: 0 Warnings: 1"
後述するexecuteメソッド部分が理由で発生している認識です
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\member\lib\Database.class.php on line 62
var_dumpしている箇所
public function execute($sql){ $sqli = mysqli_query($this->db_con, $sql); var_dump($this->db_con); return $sqli; }
SELECTのメソッド経由でのvar_dump結果
object(mysqli)#12 (19) { ["affected_rows"]=> int(1) ["client_info"]=> string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: 38fea24f2847fa7519001be390c98ae0acafe387 $" ["client_version"]=> int(50012) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(22) ["host_info"]=> string(20) "localhost via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(21) "5.5.5-10.1.31-MariaDB" ["server_version"]=> int(50505) ["stat"]=> string(134) "Uptime: 28284 Threads: 2 Questions: 545 Slow queries: 0 Opens: 26 Flush tables: 1 Open tables: 20 Queries per second avg: 0.019" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(199) ["warning_count"]=> int(0) }
UPDATEのメソッド経由でのvar_dump結果
object(mysqli)#12 (19) { ["affected_rows"]=> int(0) ["client_info"]=> string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: 38fea24f2847fa7519001be390c98ae0acafe387 $" ["client_version"]=> int(50012) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(0) ["host_info"]=> string(20) "localhost via TCP/IP" ["info"]=> string(40) "Rows matched: 1 Changed: 0 Warnings: 1" ["insert_id"]=> int(0) ["server_info"]=> string(21) "5.5.5-10.1.31-MariaDB" ["server_version"]=> int(50505) ["stat"]=> string(134) "Uptime: 28375 Threads: 2 Questions: 551 Slow queries: 0 Opens: 26 Flush tables: 1 Open tables: 20 Queries per second avg: 0.019" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(203) ["warning_count"]=> int(1) }
SELECTでDatabaseクラスに渡している内容
$data = $db->select('*', 'member', 'mem_id =' . $db->quote($mem_id)); //$db->quote($mem_id) は定数14にしています
UPDATEでDatabaseクラスに渡している内容
下記の$dataArrを$var_dumpした内容
array(18) { ["family_name"]=> string(6) "捕鯨" ["first_name"]=> string(6) "太郎" ["family_name_kana"]=> string(9) "ほげい" ["first_name_kana"]=> string(12) "いちろう" ["sex"]=> string(1) "1" ["year"]=> string(4) "1948" ["month"]=> string(2) "08" ["day"]=> string(2) "01" ["zip1"]=> string(3) "110" ["zip2"]=> string(4) "0003" ["address"]=> string(24) "東京都台東区根岸" ["email"]=> string(14) "hoge@gmail.com" ["tel1"]=> string(3) "090" ["tel2"]=> string(4) "0000" ["tel3"]=> string(4) "1111" ["traffic"]=> array(2) { [0]=> string(1) "0" [1]=> string(1) "4" } ["contents"]=> string(0) "" ["mem_id"]=> string(2) "14" }
UPDATE部分の内容
case 'update_complete': unset($_POST['update_complete']); $dataArr = $_POST; var_dump($dataArr); $_POST['traffic'] = implode('_', $_POST['traffic']); $column = ''; foreach ($dataArr as $key => $value) { if (is_array($value)) { $column .= $key . '=' . "'" . implode('_', $value) . "'" . ','; } else { $column .= $key . '=' . "'" . $value . "'" . ','; } } $res = $db->update($column . "update_date='11'", 'member',"mem_id=" . $dataArr['mem_id']);
該当のソースコード
Databaseクラス
class Database{ public $db_con = NULL; public $db_host = ''; public $db_user = ''; public $db_pass = ''; public $db_name = ''; public function __construct($db_host, $db_user, $db_pass, $db_name){ $this->db_con = $this->connectDB($db_host, $db_user, $db_pass, $db_name); $this->db_host = $db_host; $this->db_user = $db_user; $this->db_pass = $db_pass; $this->db_name = $db_name; } private function connectDB($db_host, $db_user, $db_pass, $db_name){ $tmp_con = mysqli_connect($db_host, $db_user, $db_pass, $db_name); if($tmp_con !== false){ return $tmp_con; }else{ printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } } public function execute($sql){ $sqli = mysqli_query($this->db_con, $sql); var_dump($this->db_con); return $sqli; } public function select($column,$table,$where=''){ if($where === ''){ $sql = ' SELECT ' . $column . ' FROM ' . $table; }else{ $sql = ' SELECT ' . $column . ' FROM ' . $table . ' WHERE ' .$where; } $res = $this->execute($sql); $data = []; while ($row = mysqli_fetch_array($res)){ array_push($data, $row); } return $data; } public function update($column,$table,$where=''){ if($where === ''){ $sql = ' UPDATE ' . $table . ' SET ' . $column; }else{ $sql = ' UPDATE ' . $table . ' SET ' . $column . ' WHERE ' . $where; } $res = $this->execute($sql); $data = []; while ($row = mysqli_fetch_array($res)){ array_push($data, $row); } return $data; } public function quote($int){ return mysqli_real_escape_string($this->db_con, $int); } public function str_quote($str){ return "'" . mysqli_real_escape_string($this->db_con, $str) . "'"; } public function getLastId(){ return mysqli_insert_id($this->db_con); } public function close(){ mysqli_close($this->db_con); } }
補足情報(FW/ツールのバージョンなど)
MySQL
XAMMPローカル環境
回答1件
あなたの回答
tips
プレビュー