Jump to content
php.lv forumi

MySQl insert decimal


Janis Kalejs

Recommended Posts

Sveiki visiem!

 

No CSV faila jādabū vērtības datubāzē.

	$query = " INSERT INTO datatable2(`key`, `count`, `price`,`date`) VALUES ";

while ($val = fgetcsv($res, 9999999, '	')) {

	if ($c > 0) 
	{
		if ($c > 1) 
			$query = $query . " , ";
		$query = $query . " ('$val[0]','$val[1]','$val[2]','$val[3]') ";
	}
	$c ++;
}
fclose($res);
echo $query . " ;";
mysql_query($query . " ;",$marketdb);

 

`count` ir int(11)

`price` ir decimal(6,4)

Problēma ir tā, ka abi lauki aizpildās ar 0, int ar 0 , decimal ar 0.0000

No ekrāna izkopēto izdruku palaižot, inserts nostrādā, korekti saglabājas korekti daļskaitļi.

Kas jāizdara, lai mysql_query() liek pareizas vērtības?

Link to comment
Share on other sites

skaitļu likšana apostrofos ir lamerīga, taču kļūdas tā nerada

 

kad testēju performanci, mysql_query() sākās problēmas ar kverijiem, kas ir vairākus desmitus megabaitu lieli, neskatoties uz to, ka my.ini bija max_allowed_packet=100M (by default ir tikai 1M). tāpēc tie inserti ir jāsadala pa mazākām porcijām, ja grib barot iekšā mysql_query() (~10MB laikam vēl bija ok). anyway, ja query būtu par lielu, tad tu vnk ieraudzītu erroru "MySQL server has gone away" :D:D:D

un tabulās vsp neviena rinda neierakstītos :P

 

un šāds query arī ieraksta 0, nevis 123,456?

mysql_query('INSERT datatable2 (`key`, `count`, `price`, `date`) VALUES (1, 123, 456, NOW())');

Edited by 2easy
Link to comment
Share on other sites

$query = " INSERT INTO datatable2(`key`, `count`, `price`,`date`) VALUES ( ?, ?, ?, ?)";
$stmt = mysqli_prepare($link,$query); 

while ($val = fgetcsv($res, 9999999, '	')) {

	if ($c > 0) 
	{
		$d = 1.2;
		$i = 1;

		//$d = ()$val[8];
		//$i = ()$val[16];

		$stmt->bind_param('sdii',convert($val[0]),$d,$i,$indate);
		$stmt->execute(); 
	}
}

 

Ar un bez pēdiņām nav starpības. Ja tieši uzliek skaitļus viss strādā.

Sāku domāt kaut, kā tās vērtības jā apstrādā no array. Vai nav tā, ka ja CSV fails ir radīts UNIX vai kur citur kodējums kaut kā jāmaina, lai PHP spētu konvertēt uz pareizo formātu.

 

$d = (string) $val[8];

$i = (int) $val[16];

 

Vienkārši konversācija nepalīdz ja kas :).

Link to comment
Share on other sites

Ko izvada echo '_'.$d.'_'; ?

Echo izvada:

_2.47__0.23__0.70__7.30__1.27__5.78__4.75__2.46__2.37__2.36__0.48__5.35__1.42__3.96__0.72__

 

Ja $d = (double) $val[8]; tad _0__0__0__0__0__0__0_;

 

Es saprotu ka 0 nozīmē ka konversācija nav sanākusi(false). Tāpēc arī pie inserts visur saliek 0.

 

No kā izriet nākamais jautājums :). Kā var droši nokonvertēt string uz number. Jeb tam PHP kautkāda globalizācija nav iestādīta ( analogi kā .NET) ? Daļskaitlis ir "." vai "," un pēc tā konvertē?

Link to comment
Share on other sites

Es saprotu ka 0 nozīmē ka konversācija nav sanākusi(false).

nē, neko nevajag speciāli konvertēt. vnk nejauši kkādā veidā tev dati ir kļuvuši pa nullēm. kkā vajag to debugot. katrā rindiņā taisīt echo, līdz atrodi vietu, kur bija normāls skaitlis un kur parādījās 0

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...