前提・実現したいこと
Fatal error: Call to a member function fetch_assoc() on a non-object inが解決できません。
テーブルはできていると思うのですが、レコードはまだありません。
発生している問題・エラーメッセージ
上記のエラーメッセージが出ている行は
$db->fetch_assoc();
となっており、
$result=$db->query("select count(*) from reserveslot where date>={$row["date"]}"); // $row["date"]は上で select * from todayから取得しています
エラーメッセージ
該当のソースコード
$db->query("create table reserveslot (date varchar(20) primary key, rs1 int default 0, rs2 int default 0, rs3 int default 0, rs4 int default 0, rs5 int default 0, rs6 int default 0, rs7 int default 0) default charset=sjis"); $db->query("create table today (date int not null, year int, month int, day int, maxday int) default charset=sjis"); function product_reserve_time(){ $db=new mysqli("localhost","username","password","dbname"); $db->set_charset("sjis"); $result=$db->query("select* from today"); print $db->error; $row=$result->fetch_assoc(); $result=$db->query("select count(*) from reserveslot where date>={$row["date"]}"); $row=$result->fetch_assoc(); // エラー行 if($row["count"]==0){ $result=$db->query("select * from today"); $row=$result->fetch_assoc(); $time=(int)$row["date"]; $db->query("insert into reserve_info (date) values({$row["date"]})"); print $db->error; for($i=0;$i<6;$i++){ $db->query("insert into reserveslot (date) values('{$time}')"); $time=$time+86400; print $db->error; } } if($row["count"]!=0&&$row["count"]<7){ $count=(int)$row["count"]; $count=7-$count; $result=$db->query("select * from reserveslot order by date desc order by date desc limit 1"); print $db->error; $row=$result->fetch_assoc(); $time=(int)$row["date"]; for($i=0;$i<$count;$i++){ $time=$time+86400; $db->query("insert into reserveslot (date) values('{$time}')"); print $db->error; } } $result=$db->query("select * from reserveslot where date>=(select date from today) limit 7"); print $db->error; while($row=$result->fetch_assoc()) { printf("<input type=\"radio\" name=\"date\" value=\"%s\">%s月%s日",$row["date"],idate("m",$row["date"]),idate("d",$row["date"])); printf("<select name=\"%s\"><option>----</option>",$row["date"]); if($row["rs1"]==0) print "<option value=\"1\">19:00</option>"; if($row["rs2"]==0) print "<option value=\"2\">20:30</option>"; if($row["rst3"]==0) print "<option value=\"3\">22:00</option>"; if($row["rt4"]==0) print "<option value=\"4\">23:30</option>"; if($row["rs5"]==0) print "<option value=\"5\">25:00</option>"; if($row["rs6"]==0) print "<option value=\"6\">26:30</option>"; if($row["rs7"]==0) print "<option value=\"7\">28:00</option>"; print "</select><br><br>"; } $db->close(); } function updtrs(){ $query="update table reserveslot set "; switch($_SESSION["time"]){ case "1": $query.="rs1=1 "; break; case "2": $query.="rs2=1 "; break; case "3": $query.="rs3=1"; break; case "4": $query.="rs4=1 "; break; case "5": $query.="rs5=1 "; break; case "6": $query.="rs6=1 "; break; case "7": $query.="rs7=1 "; break; } $query.="where date='".$_SESSION["date"]."'"; $db=new mysqli("localhost","username","password","dbname"); $db->query("{$query}"); $db->close(); }
最初からこのようにすればよかったかもしれませんね。
試したこと
intとvarcharの間でwhereを使っているのがダメなのかと思いましたが、mysqlのオンラインマニュアルにはそんな記述は見つけられず、手詰まりになっています。
目が全く見えないので、できる限りこの掲示板で解決できるよう、URLだけのご紹介だけでなく、今後も同じことで引っかからないように基本的にわかっていなさそうなこともフォローしていただいたり、できる限り修正箇所をどのように修正すればいいのか丁寧にお知らせいただけると助かります。ご理解とご協力のほどお願いいたします。
回答3件
あなたの回答
tips
プレビュー