[PHP/MySQL] database accepteert integer niet?

Pagina: 1
Acties:
  • 231 views

Onderwerpen


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik snap er echt helemaal niets meer van. Ik haal een JSON object op van Twitter. Hierin heeft elke tweet een 17-cijferige "id_str", bijvoorbeeld [id_str] => 38335542055796736. Ik heb een MySQL database tabelletje met daarin een id_str veld, gedefinieerd als bigint(17). Om de JSON informatie via php op te slaan in de database, gebruik ik json_decode om het object om te zetten in een php variant.

Maar wat ik ook niet probeer, telkens worden voor elke id_str het cijfer 2147483647 ingevoerd!? Dat cijfer zegt mij verder niets; het is ook niet toevallig de waarde van een andere property uit het JSON object ofzo.

Als ik in de tabel bigint(17) verander in int(17) verandert dat niets. Vreemd genoeg: als ik in de tabel id_str verander in een varchar(17), worden de strings wel goed opgeslagen.

Waarschijnlijk wordt (ook gezien de naam), id_str als een string gezien, maar als ik het volgende in mijn code id_str tot een integer forceer, helpt dat ook niets:

code:
1
2
3
4
5
  db_query("
    INSERT INTO tweets (query, id_str, created_at, ...)
    VALUES('%s', '%s', %d, %d, ...)
    $query, (int)$tweet['id_str'], strtotime($tweet['created_at']), ...
  );


Wat doe ik nu verkeerd?

[ Voor 6% gewijzigd door Reveller op 17-02-2011 21:51 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • BSTNjitRam
  • Registratie: November 2004
  • Laatst online: 10:18
Weet je zeker dat je een bigint gebruikt?

2147483647 is de maximale waarde van een Int32.

Wishlist Backpack Survivors op Steam !


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Je doet ergens in PHP een int cast of iets dergelijks, en vergeet daarbij dat je blijkbaar op een 32bits install werkt. :)

{signature}


Verwijderd

Waarom sla je het dan per se op als een integer en niet als een string?

En dan nog, werk je op een 32-bit systeem of op een 64-bit systeem?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21-09 21:47

Creepy

Tactical Espionage Splatterer

Bekijk http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html en http://php.net/manual/en/language.types.integer.php eens en ziedaar: 2147483647 is de max (signed) value van een INT. Kom op zeg. Er is goede documentatie. Doe aub de moeite om het ff door te lezen.

edit: iemand vroeg me om het volgende nog toe te voegen ter verduidelijking (en is gelijk een uitleg waar int(17) niet werkt)
Numeric Type Attributes

MySQL supports an extension for optionally specifying the display width of integer data types in parentheses following the base keyword for the type. For example, INT(4) specifies an INT with a display width of four digits. This optional display width may be used by applications to display integer values having a width less than the width specified for the column by left-padding them with spaces. (That is, this width is present in the metadata returned with result sets. Whether it is used or not is up to the application.)

The display width does not constrain the range of values that can be stored in the column. Nor does it prevent values wider than the column display width from being displayed correctly. For example, a column specified as SMALLINT(3) has the usual SMALLINT range of -32768 to 32767, and values outside the range permitted by three digits are displayed in full using more than three digits.

[ Voor 78% gewijzigd door Creepy op 17-02-2011 22:02 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Dit topic is gesloten.