Postingan lainnya
Buku Ini Koding!
Baru!
Buku ini akan jadi teman perjalanan kamu belajar sampai dapat kerjaan di dunia programming!
Ambil variable dari hasil random gagal untuk update data
saya ketemu kasus gagal update data table dengan ambil variable dari hasil random, apa ada yang salah dalam script saya ? :
$sql=$dbh->query("SELECT * FROM table Where verify='y' and finish !='0' ORDER BY RAND() LIMIT 1");
$sql->execute();
$k=$sql->fetch();
$kode=$k['kode'];
$start=($k['start']) + 1; //isi field start : 0
$finish=($k['finish']) - 250; //isi field finish : 5000
$stmt = $dbh->prepare("UPDATE table SET start = :start, finish = :finish WHERE kode = :kode");
$stmt->bindParam(':start',$start);
$stmt->bindParam(':finish',$finish);
$stmt->bindParam(':kode',$kode);
$stmt->execute();
yang terjadi terupdate seluruh data table bukan yang terpilih dan pada field finish terupdate menjadi ( -250 ) sedang start menjadi ( 1 ), padahal saat di echo $finish : 4750 dan $start : 1
mohon bagi ilmunya bagi yang tahu masalah diatas.
Tanggapan
sebelum data diupdate (prepare yang kedua) saat kamu die(var_dump($kode)) isisnya sudah benar? sudah sesuai kode yang dimau?
4 Jawaban:
Jawaban Terpilih
Kalau seluruh data yang terupdate berarti kesalahan pada WHEREnya , pastikan field $kode adalah field yang unik.
Coba bereksperimen dengan bindValue
<pre> $sth->bindValue(':namakolom', $nilaikolom, PDO::PARAM_ST); </pre>
Tanggapan
Solusi sudah kami temukan , sudah kami jelaskan di forum ini juga permasalahannya, dan kami ucapkan banyak2 terima kasih .
isi field $kode id satu dengan id lainnya dalam table berbeda beda , tidak ada yg sama, saat di echo ya yang ke random saja yang muncul , tapi saat diterapkan dalam update , hasilnya seperti yang telah saya jelaskan didalam pertanyaan itu.
kalau diamati walaupun di echo muncul sesuai , <pre> echo"$kode"; //hasilnya KJ9gy echo"$start"; //hasilnya 1 echo"$finish"; //hasilnya 4750 </pre>
tapi dalam proses update : <pre> $kode=$k['kode'];//hasilnya NULL $start=($k['start']) + 1; //hasilnya 1 $finish=($k['finish']) - 250;//hasilnya -250 </pre>
tapi kalau saya copy scriptnya dan saya paste dalam file tersendiri dan saya jalankan, bejalan normal, jika ditaruh ditempat yang saya harapkan untuk bekerja disitu ya seperti itu, dan tidak ada info error , padahal sudah saya kasih :
<pre> error_reporting(E_ALL & ~E_NOTICE); </pre>
ini membingungkan, barangkali ada yang tahu, mohon bagi ilmunya.
Tanggapan
jawaban saya sudah saya update, silahkan dicoba, btw kalau ada info tambahan, tambahkanya di pertanyaan, jawaban khusus untuk menjawab,, terimaksish
sudah saya coba juga :
<pre> $sth = $dbh->prepare("UPDATE table SET start = :start,finish = :finish WHERE kode = :kode"); $sth->bindValue(':kode',$kode,PDO::PARAM_INT); $sth->bindValue(':start',$start,PDO::PARAM_STR); $sth->bindValue(':finish',$finish,PDO::PARAM_STR); $sth->execute(); </pre> hasil sama saja gagal
kode pakai script yang dibawah ini error: <pre> $sth = $dbh->prepare("UPDATE table SET start = :start,finish = :finish WHERE kode = :kode"); $sth->bindValue(':kode',$kode,PDO::PARAM_INT); $sth->bindValue(':start',$start,PDO::PARAM_ST); //ST bukan STR hasil eeror $sth->bindValue(':finish',$finish,PDO::PARAM_ST);//ST bukan STR hasil error $sth->execute(); </pre>
mencoba pakai script ya satu lagi yg dibawah ini : <pre> $stt = $dbh->prepare("UPDATE table SET start= :start,finish= :finish WHERE kode= :kode"); $data= array( 'mulai'=>$start, 'akhir'=>$finish, 'kode'=>$kode ); $stt->execute($data); </pre> sama juga outputnya output echo normal output dalam script update $kode = NULL $start = 1 $finish = -250 tapi tidak ada info error sama sekali
anehnya .... jika seluruh script saya delete dan saya sisakan script terkait dengan update, maka script update jalan normal
Alhamdulillah telah berhasil sukses setelah menggunakan script update : <pre> $stt = $dbh->prepare("UPDATE table SET start= :start,finish= :finish WHERE kode= :kode"); $data= array( 'mulai'=>$start, 'akhir'=>$finish, 'kode'=>$kode ); $stt->execute($data); </pre> adapun munculnya output dalam script update $kode = NULL $start = 1 $finish = -250
krn kurang ketelitian saya sendiri dibawah ada secipt lain yg belum saya del makanya tidak ada info error sama sekali.
memang script sebelumnya bikin bingung saya selama 24 jam lebih hingga kurang tidur, yah ini adalah pengalaman, dan memang tidak boleh putus asa, kadang kesalahan didepan mata kita tidak melihatnya.
ok terima kasih semuanya yang telah ikut membantu berfikir dan mencarikan solusi.