Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  MySQL kala märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
Muhatu
HV vaatleja
Muhatu

liitunud: 27.02.2003




sõnum 31.08.2008 17:59:42 MySQL kala vasta tsitaadiga

On tekkinud probleem järgneva jupiga koodis:


      mysql_query("INSERT into ten_inimesed_uus set eesnimi='$eesnimi', synniaeg='$synniaeg', perenimi='$perenimi', telefon='$telefon', email='$email', regaeg='$regaeg'");
      $p = mysql_query("SELECT * from ten_inimesed_uus where eesnimi='$eesnimi' and perenimi='$perenimi' and telefon='$telefon' and email='$email' and regaeg='$regaeg'");
      $i = mysql_fetch_array($p);
      mysql_query("INSERT into ten_osalemised_uus set inimese_id='" . $i["id"]."', yrituse_id='".$yrituse_id."', rolli_id='".$ir["id"]."'");


Kõik töötab plaanipäraselt välja arvatud inimese_id seadmine, mis jääb iga kord nulliks.

Kas see jupp: inimese_id='" . $i["id"]."' on mul valesti kirjutatud?
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
Valdars
HV veteran
Valdars

liitunud: 22.02.2003




sõnum 31.08.2008 18:17:50 vasta tsitaadiga

Esimene asi- vaata järgi, mis sul seal $i sees üldse on.
Kommentaarid: 47 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 44
tagasi üles
vaata kasutaja infot saada privaatsõnum
troglodyte
Kreisi kasutaja
troglodyte

liitunud: 09.08.2002




sõnum 31.08.2008 18:21:48 vasta tsitaadiga

Ilgelt kena oleks ALATI kontrollida kas päring õnnestus või mitte ja kas tagastati vajalik hulk ridu.
_________________
ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn
Kommentaarid: 34 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 34
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Celion
HV kasutaja
Celion

liitunud: 31.10.2002




sõnum 31.08.2008 18:34:08 vasta tsitaadiga

Ja kas selleks on mingi mõjuv põhjus, et mysql_insert_id() asemel see ID eraldi SELECT päringuga võtta? Huvi pärast küsin - mulle õpetati, et see funktsioon on suhteliselt kindlam moodus igasugu ID-de kättesaamiseks sellistel juhtudel.
_________________
Ostan Roger Zelazny "Amberi kroonikad" (soovitatavalt eesti keeles).
Kommentaarid: 46 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 45
tagasi üles
vaata kasutaja infot saada privaatsõnum
Muhatu
HV vaatleja
Muhatu

liitunud: 27.02.2003




sõnum 31.08.2008 18:51:21 vasta tsitaadiga

Muutsin rea selliseks:

mysql_query("INSERT into ten_osalemised_uus set inimese_id='mysql_insert_id()', yrituse_id='".$yrituse_id."', rolli_id='".$ir["id"]."'");


ning mysql_insert_id() on õige väärtusega, aga tabelisse ta ikka ei jõua :S.
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004



Online

sõnum 31.08.2008 19:11:47 vasta tsitaadiga

kasuta funktsiooni mysql_error näiteks
php:
  1. echo mysql_errno() . ": " . mysql_error() . "\n";
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
nemu
HV vaatleja
nemu

liitunud: 22.01.2002



Autoriseeritud ID-kaardiga

sõnum 31.08.2008 20:23:25 vasta tsitaadiga

Muhatu kirjutas:
Muutsin rea selliseks:

mysql_query("INSERT into ten_osalemised_uus set inimese_id='mysql_insert_id()', yrituse_id='".$yrituse_id."', rolli_id='".$ir["id"]."'");


ning mysql_insert_id() on õige väärtusega, aga tabelisse ta ikka ei jõua :S.


Loomulikult ei jõua, kui üritad inimese_id väljale kribada stringi 'mysql_insert_id()' icon_smile.gif
Kommentaarid: 12 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 11
tagasi üles
vaata kasutaja infot saada privaatsõnum
Muhatu
HV vaatleja
Muhatu

liitunud: 27.02.2003




sõnum 31.08.2008 20:34:25 vasta tsitaadiga

Hehe, korda sain, tekitasin uue muutuja, millele andsin mysql_insert_id() käsklusega väärtuse ning selle muutuja kirjutamine väljale õnnestus edukalt thumbs_up.gif

Tänud kõikidele abistajatele beer_yum.gif beer_yum.gif
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
tanzanite
HV kasutaja
tanzanite

liitunud: 13.05.2006




sõnum 02.09.2008 15:50:13 Re: MySQL kala vasta tsitaadiga

Muhatu kirjutas:

      mysql_query("INSERT into ten_inimesed_uus set eesnimi='$eesnimi', synniaeg='$synniaeg', perenimi='$perenimi', telefon='$telefon', email='$email', regaeg='$regaeg'");
      $p = mysql_query("SELECT * from ten_inimesed_uus where eesnimi='$eesnimi' and perenimi='$perenimi' and telefon='$telefon' and email='$email' and regaeg='$regaeg'");
      $i = mysql_fetch_array($p);
      mysql_query("INSERT into ten_osalemised_uus set inimese_id='" . $i["id"]."', yrituse_id='".$yrituse_id."', rolli_id='".$ir["id"]."'");

1) loodetavasti on need muutujad eelnevalt varjestatud.
2) päring ei kõlba lisatud rea ID saamiseks.
3) mysql_fetch_assoc oleks mõistlikum - aga erilist vahet pole.
4) antud tegevus karjub transaktsiooni järgi.
5) puudub veakontroll.

Celion kirjutas:
Ja kas selleks on mingi mõjuv põhjus, et mysql_insert_id() asemel see ID eraldi SELECT päringuga võtta? Huvi pärast küsin - mulle õpetati, et see funktsioon on suhteliselt kindlam moodus igasugu ID-de kättesaamiseks sellistel juhtudel.
Mitte kindlam - vaid ainuke moodus. (vastuvaidlejaid peksan selgitusteta niikaua kui nõustutakse icon_wink.gif )
tagasi üles
vaata kasutaja infot saada privaatsõnum
karu
HV kasutaja

liitunud: 08.08.2002




sõnum 02.09.2008 16:02:58 Re: MySQL kala vasta tsitaadiga

tanzanite kirjutas:
3) mysql_fetch_assoc oleks mõistlikum - aga erilist vahet pole.

tegelikult siin see 'kala' ongi. $i[0] vs $i['id']
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004



Online

sõnum 02.09.2008 16:11:10 vasta tsitaadiga

karu, tegelikult default asendis annab mysql_fetch_array nii numbri kui nime vasted

tsitaat:
result_type

The type of array that is to be fetched. It's a constant and can take the following values: MYSQL_ASSOC, MYSQL_NUM, and the default value of MYSQL_BOTH

mysql_fetch_row on see, mis annab vaid numbrilise array
küll aga on mysql_fetch_assoc() või siis mysql_fetch_array(, MYSQL_ASSOC) mälusäästlikumad, kui on teada et nimelist arrayd soovitakse vaid
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
maxorator
HV kasutaja

liitunud: 30.08.2006




sõnum 02.09.2008 17:14:59 vasta tsitaadiga

Vastupidi, numbriline sorteerimine on kiirem ja mälusäästlikum sest andmed saab otse indeksi kaudu kätte ning eraldi key väljaga mässamist ei ole ning seda ei talletata. Nimelise puhul iga kord, kui sa seda kasutad, otsib ta "võtmed" läbi, et leida vajaliku nimega võti.

mysql_fetch_row() on ka kasulik seetõttu, et seda saab kasutada koos list() funktsiooniga.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004



Online

sõnum 02.09.2008 19:34:46 vasta tsitaadiga

maxorator, jah, loomulikult on MYSQL_NUM kiirem kui MYSQL_BOTH ja MYSQL_ASSOC, kuid kui on soov kasutada siiski nimede järgi massiivist asju, siis on mõttekam MYSQL_ASSOC, kuna see on mälusäästlikum kui MYSQL_BOTH
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
tanzanite
HV kasutaja
tanzanite

liitunud: 13.05.2006




sõnum 03.09.2008 13:24:46 vasta tsitaadiga

*_row mälusäästlikus vs *_assoc on reeglina ebaoluline. Märksa olulisem on koodi loetavus / muudetavus. Mingid maagilised veeru numbrid mis on jäigalt seotud sellega mis järjekorras väljad olid päringus on väga paha mõte. Vastuvaidlejaid hakkan selgitusteta nõustumiseni nüpeldama :p

*_assoc vs *_array(BOTH) on tõesti ainult mäluvahe ... _assoc kasuks.

maxorator kirjutas:
Vastupidi, numbriline sorteerimine on kiirem ja mälusäästlikum sest andmed saab otse indeksi kaudu kätte ning eraldi key väljaga mässamist ei ole ning seda ei talletata. Nimelise puhul iga kord, kui sa seda kasutad, otsib ta "võtmed" läbi, et leida vajaliku nimega võti.
Vale. PHP ei toeta "tavamõistes" arrayd => map all the way.

Proovi ise:

$x=array();

$x[1]='a';
$x[3]='b';
$x[2]='c';

print_r($x);
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  MySQL kala
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.