Tahun baru, skill baru! 🚀. Masukkan kupon "skill2025" untuk diskon 30% di kelas apa saja

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.

avatar mboh
@mboh

42 Kontribusi 6 Poin

Diperbarui 6 tahun yang lalu

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-&gt;bindValue(':namakolom', $nilaikolom, PDO::PARAM_ST); </pre>

avatar hilmanski
@hilmanski

2711 Kontribusi 2140 Poin

Dipost 6 tahun yang lalu

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.

avatar mboh
@mboh

42 Kontribusi 6 Poin

Dipost 6 tahun yang lalu

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-&gt;prepare("UPDATE table SET start = :start,finish = :finish WHERE kode = :kode"); $sth-&gt;bindValue(':kode',$kode,PDO::PARAM_INT); $sth-&gt;bindValue(':start',$start,PDO::PARAM_STR); $sth-&gt;bindValue(':finish',$finish,PDO::PARAM_STR); $sth-&gt;execute(); </pre> hasil sama saja gagal

kode pakai script yang dibawah ini error: <pre> $sth = $dbh-&gt;prepare("UPDATE table SET start = :start,finish = :finish WHERE kode = :kode"); $sth-&gt;bindValue(':kode',$kode,PDO::PARAM_INT); $sth-&gt;bindValue(':start',$start,PDO::PARAM_ST); //ST bukan STR hasil eeror $sth-&gt;bindValue(':finish',$finish,PDO::PARAM_ST);//ST bukan STR hasil error $sth-&gt;execute(); </pre>

mencoba pakai script ya satu lagi yg dibawah ini : <pre> $stt = $dbh-&gt;prepare("UPDATE table SET start= :start,finish= :finish WHERE kode= :kode"); $data= array( 'mulai'=&gt;$start, 'akhir'=&gt;$finish, 'kode'=&gt;$kode ); $stt-&gt;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

avatar mboh
@mboh

42 Kontribusi 6 Poin

Dipost 6 tahun yang lalu

Alhamdulillah telah berhasil sukses setelah menggunakan script update : <pre> $stt = $dbh-&gt;prepare("UPDATE table SET start= :start,finish= :finish WHERE kode= :kode"); $data= array( 'mulai'=&gt;$start, 'akhir'=&gt;$finish, 'kode'=&gt;$kode ); $stt-&gt;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.

avatar mboh
@mboh

42 Kontribusi 6 Poin

Dipost 6 tahun yang lalu

Login untuk ikut Jawaban