前置き
Wordpressの便利な部分を活用しつつ一つのDBでは不可能/難しい/面倒臭い(と思う)複雑(だと思う)な複数DBシステムを構築し、そちらを外部PHPで操作する、といったことをやっています。
やりたいこと
コース内のプランこと、レコードを消去するSQL文を実行したいです。
コース=テーブル
プラン=レコード
という感じです。
発生している問題
下の実験1はSHOW TABLESでしっかりテーブルの一覧が表示されるので、データベースに接続できてはいるのですが、
上のレコードを消去するSQL文が機能してくれません。
var_dumpによると
bool(false)
だそうです。
PHP
1echo 'プランを消去します'; 2 3try{ 4 $pdo = new PDO("mysql:dbname=$db_datebase_6;host=$db_address_3;charset=utf8",$db_user,$db_password); 5 $stmt = $pdo->query('DELETE FROM consumercourse WHERE planid=test'); 6 echo '<br>'; 7 var_dump($stmt); 8}catch(PDOException $e){ 9 echo 'Connection failed: ' . $e->getMessage(); 10 var_dump($e); 11 echo 'エラーが発生しました。'; 12} 13 14 15//実験1⇓ 16if (isset($db_address_3) && isset($db_datebase_6) && isset($db_user) && isset($db_password)) { 17try{ 18 $pdo = new PDO("mysql:dbname=$db_datebase_6;host=$db_address_3;charset=utf8",$db_user,$db_password); 19 foreach($pdo->query('SHOW TABLES') as $row) { 20 print_r($row); 21 } 22}catch(PDOException $e){ 23 echo 'Connection failed: ' . $e->getMessage(); 24 var_dump($e); 25 echo 'エラーが発生しました。'; 26} 27} else { 28 echo 'データが格納されていません'; 29}
証拠画像
![
PHPMyAdminによるとこのようになっています。
testの行が消去されるはずなんですが…
環境
- ロリポップ
- MYSQL
- Wordpress
+の質問
回答者様によってレコードの消去方法が判明しましたが、次はちょっと別のトラブルが発生しました。
やりたい事
SQL文への変数代入方法が知りたいです。
PHP
1 2echo 'プランを消去します'; 3//コース=テーブルの取得 4$select = $_GET['courseselect']; 5//レコード=プランの取得 6$planid = $_GET['p_delete']; 7 8echo '<br>'; 9echo "$select"; 10echo '<br>'; 11echo "$planid"; 12//しっかり取得できてはいる↑ 13 14try{ 15 $pdo = new PDO("mysql:dbname=$db_datebase_6;host=$db_address_3;charset=utf8",$db_user,$db_password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]); 16 //テーブル(コース)とレコード(プラン)の変数をSQL文に代入したい↓ 17 $stmt = $pdo->query("DELETE FROM ' . $select . ' WHERE planid='' . $planid . ''"); 18 //foreach($pdo->query('DELETE FROM consumercourse WHERE planid=test') as $row) { 19 echo '<br>'; 20 var_dump($stmt); 21 //} 22}catch(PDOException $e){ 23 //ここで補足される例外はコネクションだけではない 24 // 25 echo 'Connection failed: ' . $e->getMessage(); 26 var_dump($e); 27 echo 'エラーが発生しました。'; 28} 29 30echo '<br>'; 31 32if (isset($db_address_3) && isset($db_datebase_6) && isset($db_user) && isset($db_password)) { 33try{ 34 $pdo = new PDO("mysql:dbname=$db_datebase_6;host=$db_address_3;charset=utf8",$db_user,$db_password); 35 foreach($pdo->query('SHOW TABLES') as $row) { 36 print_r($row); 37 echo '<br>'; 38 var_dump($row); 39 } 40}catch(PDOException $e){ 41 //ここで補足される例外はコネクションだけではない 42 //echo 'Connection failed: ' . $e->getMessage(); 43 var_dump($e); 44 echo 'エラーが発生しました。'; 45} 46} else { 47 echo 'データが格納されていません'; 48} 49
こちらが↑のファイルの上位にあるファイルです
PHP
1$select = $_GET['courseselect']; 2$db_address_1 = 'hogehoge.phy.lolipop.lan'; 3$db_address_2 = 'hogehoge.phy.lolipop.lan'; 4$db_address_3 = 'hogehoge.phy.lolipop.lan'; 5 6$db_user = 'hogehogehoge'; 7$db_password = 'hogehogehoge'; 8 9$db_datebase_1 = 'hogehoge-hogehogehoge'; 10$db_datebase_2 = 'hogehoge-hogehogehoge'; 11$db_datebase_3 = 'hogehoge-hogehogehoge'; 12$db_datebase_4 = 'hogehoge-hogehogehoge'; 13$db_datebase_5 = 'hogehoge-hogehogehoge'; 14$db_datebase_6 = 'hogehoge-hogehogehoge'; 15 16//接続方法が原始的なのはお許しください 17$conn = mysql_connect($db_address_3, $db_user, $db_password); 18 19if (!$conn) { 20 echo "データベースに接続できません: " . mysql_error(); 21 exit; 22} 23 24if (!mysql_select_db($db_datebase_6)) { 25 echo "データベースを選択できません: " . mysql_error(); 26 exit; 27} 28$result = mysql_query('SET NAMES utf8', $conn); 29$sql = "SELECT planid, planname, plandescription, initialfee, monthlycost, video, consultation 30 FROM $select"; 31 32$result = mysql_query($sql); 33 34if (!$result) { 35 echo "データベース/テーブルを読み込めません ($sql) from DB: " . mysql_error(); 36 exit; 37} 38 39if (mysql_num_rows($result) == 0) { 40 echo "このコースにはまだプランがないようです。"; 41} 42 43print('<table class="wp-list-table widefat fixed striped pages">'); 44while ($row = mysql_fetch_assoc($result)) { 45 print('<tr>'); 46 print('<td>'); 47 print $row["planid"]; 48 print('</td>'); 49 print('<td>'); 50 print $row["planname"]; 51 print('</td>'); 52 print('<td>'); 53 print $row["plandescription"]; 54 print('</td>'); 55 print('<td>'); 56 print $row["initialfee"]; 57 print('</td>'); 58 print('<td>'); 59 print $row["monthlycost"]; 60 print('</td>'); 61 print('<td>'); 62 print $row["video"]; 63 print('</td>'); 64 print('<td>'); 65 print $row["consultation"]; 66 print('</td>'); 67 print('<td>'); 68 $planid = $row["planid"]; 69 $url = admin_url(); 70 print '<a href=admin.php?page=hogehoge_system_setting&courseselect=' . $select . '&p_edit=' . $planid . ' ”>プランを編集する</a>'; 71 print('</td>'); 72 print('<td>'); 73 print '<a href=admin.php?page=hogehoge_system_setting&courseselect=' . $select . '&p_delete=' . $planid . ' ”>プランを消去する</a>'; 74 print('</td>'); 75 print('</tr>'); 76} 77print('</table>'); 78 79$p_edit = $_GET['p_edit']; 80$p_delete = $_GET['p_delete']; 81 82mysql_free_result($result); 83if (isset($p_edit) or isset($p_delete)) { 84 if (isset($p_edit)) { 85 require_once ('秘密保守につき割愛/wp-content/themes/ALC/adminpage/sysytemset/plansystem/planedit.php'); 86 87 } 88 if (isset($p_delete)) { 89 require ('秘密保守につき割愛/wp-content/themes/ALC/adminpage/sysytemset/plansystem/plandelete.php'); 90 91 } 92} else { 93 require_once ('秘密保守につき割愛/wp-content/themes/ALC/adminpage/sysytemset/plansystem/planadd.php'); 94}
これ↑の更に上位のファイルに、
PHP
1 $client = $_GET['adminsystempage']; 2 if (is_null($client)) { 3 4 $db_address_1 = 'hogehoge.phy.lolipop.lan'; 5 $db_address_2 = 'mysql103.phy.lolipop.lan'; 6 $db_address_3 = 'mysql132.phy.lolipop.lan'; 7 8 $db_user = 'hogehoge'; 9 $db_password = 'hogehoge'; 10 11 $db_datebase_1 = 'hogehoge-hogehoge'; 12 $db_datebase_2 = 'hogehoge-hogehoge'; 13 $db_datebase_3 = 'hogehoge-hogehoge'; 14 $db_datebase_4 = 'hogehoge-hogehoge'; 15 $db_datebase_5 = 'hogehoge-hogehoge'; 16 $db_datebase_6 = 'hogehoge-hogehoge'; 17 try{ 18 $pdo = new PDO("mysql:dbname=$db_datebase_6;host=$db_address_3;charset=utf8",$db_user,$db_password); 19 $stmt = $pdo->query('SHOW TABLES'); 20 print('<table class="wp-list-table widefat fixed striped pages">'); 21 while($a_course = $stmt->fetch(PDO::FETCH_ASSOC)){ 22 print('<tr>'); 23 print('<td>'); 24 $course = $a_course["Tables_in_LAA0547874-familiacours"]; 25 echo "$course"; 26 print('</td>'); 27 print('<td>'); 28 $title1 = 'コースを編集する'; 29 $url = admin_url(); 30 print '<a href="' . $url . 'admin.php?page=familia_system_setting&courseselect=' . $course . '">'.$title1.'</a><br />'; 31 print('</td>'); 32 print('<td>'); 33 $title2 = 'コースを消去する'; 34 $url = admin_url(); 35 print '<a href="' . $url . 'admin.php?page=familia_system_setting&coursedelete=' . $course . '">'.$title2.'</a><br />'; 36 print('</td>'); 37 print('</tr>'); 38 echo '<br>'; 39 } 40 print('</table>'); 41 }catch(PDOException $e){ 42 //ここで補足される例外はコネクションだけではない 43 //echo 'Connection failed: ' . $e->getMessage(); 44 var_dump($e); 45 echo 'エラーが発生しました。'; 46 } 47 }else { 48 $coursename = $_POST['coursename']; 49 if (is_null($coursename)) { 50 echo ' 51 <form action="" method="POST"> 52 <label>コース名</label><br> 53 <input type="text" name="coursename"><br> 54 <input type="submit" value="コースを追加する" /><br> 55 </form 56 '; 57 }else { 58 59 try { 60 var_dump($coursename); 61 $db_address_1 = 'hogehoge.phy.lolipop.lan'; 62 $db_address_2 = 'mysql103.phy.lolipop.lan'; 63 $db_address_3 = 'mysql132.phy.lolipop.lan'; 64 65 $db_user = 'hogehoge'; 66 $db_password = 'hogehoge'; 67 68 $db_datebase_1 = 'hogehoge-hogehoge'; 69 $db_datebase_2 = 'hogehoge-hogehoge'; 70 $db_datebase_3 = 'hogehoge-hogehoge'; 71 $db_datebase_4 = 'hogehoge-hogehoge'; 72 $db_datebase_5 = 'hogehoge-hogehoge'; 73 $db_datebase_6 = 'hogehoge-hogehoge'; 74 75 $conn = new PDO("mysql:host=$db_address_3;dbname=$db_datebase_6", $db_user, $db_password); 76 // set the PDO error mode to exception 77 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 78 79 // sql to create table 80 $sql = "CREATE TABLE $coursename ( 81 planid TEXT(30), 82 planname TEXT(30), 83 plandescription TEXT(50), 84 initialfee INT(20), 85 monthlycost INT(20), 86 video INT(20), 87 consultation INT(20) 88 89 )"; 90 91 // use exec() because no results are returned 92 $conn->exec($sql); 93 echo "新規コーステーブルを作成しました。"; 94 } 95 catch(PDOException $e) 96 { 97 echo $sql . "<br>" . $e->getMessage(); 98 } 99 $conn = null; 100 } 101 }
とあります
回答1件
あなたの回答
tips
プレビュー