Viennamade: Kein MySQL-Error

Hallo!

Mit mysql_query/CREATE TABLE erstelle ich eine Tabelle, eines der Felder mit "Kurzbezeichnung VARCHAR(30)". Also max. Länge 30 Zeichen.

Mit mysql_query/INSERT INTO schreib ich was rein, in das Feld Kurzbezeichnung mehr als 30 Zeichen. Dabei wird der Zeichenüberhang abgeschnitten, also landen 30 Zeichen im Feld.

Keine Fehlermeldung, auch mysql_error() und mysql_errno() bleiben leer. Ich hätte gerne eine Fehlermeldung, bekomme ich die irgendwo her? Oder gibt's einen Parameter der solche Fehlermeldungen erzwingt?

Danke
Viennamade

  1. hi,

    Keine Fehlermeldung, auch mysql_error() und mysql_errno() bleiben leer. Ich hätte gerne eine Fehlermeldung, bekomme ich die irgendwo her? Oder gibt's einen Parameter der solche Fehlermeldungen erzwingt?

    nicht, dass ich wüsste.
    du wirst die string-länge wohl schon php-seitig abfragen müssen.

    gruss,
    wahsaga

  2. Hello,

    Mit mysql_query/CREATE TABLE erstelle ich eine Tabelle, eines der Felder mit "Kurzbezeichnung VARCHAR(30)". Also max. Länge 30 Zeichen.

    Mit mysql_query/INSERT INTO schreib ich was rein, in das Feld Kurzbezeichnung mehr als 30 Zeichen. Dabei wird der Zeichenüberhang abgeschnitten, also landen 30 Zeichen im Feld.

    Dazu musst Du Dir vorher die Metadaten der Tabelle besorgen und die dann in der API beachten, also in deinem Fall im PHP-Interface.

    Ich bastele da immer noch an einer Funktion, die Dir sicher auch weiterhelfen könnte:

    #--------------------------------------------------------------------

    function split_types($_colinfo) {   if(!is_array($_colinfo)) return false;

    $_types = array("tinyint"=>array("N","right",4,4),                   "smallint"=>array("N","right",6,6),                   "mediumint"=>array("N","right",8,8),                   "int"=>array("N","right",11,11),                   "bigint"=>array("N","right",20,20),                   "float"=>array("N","right",25,25),                   "double"=>array("N","right",53,53),                   "decimal"=>array("N","right",53,53),                   "date"=>array("D","center",10,10),                   "datetime"=>array("D","center",19,19),                   "timestamp"=>array("D","right",14,14),                   "time"=>array("D","center",8,8),                   "year"=>array("D","right",4,4),                   "char"=>array("S","left",255,MAXCOLWIDTH),                   "varchar"=>array("S","left",255,MAXCOLWIDTH),                   "tinyblob"=>array("M","left",255,MAXCOLWIDTH),                   "tinytext"=>array("M","left",255,MAXCOLWIDTH),                   "text"=>array("M","left",65535,MAXCOLWIDTH),                   "blob"=>array("O","left",65536,MAXCOLWIDTH),                   "mediumblob"=>array("O","left",16777215,MAXCOLWIDTH),                   "mediumtext"=>array("M","left",16777215,MAXCOLWIDTH),                   "longblob"=>array("O","left",4294967295,MAXCOLWIDTH),                   "longtext"=>array("S","left",4294967295,MAXCOLWIDTH),                   "enum"=>array("S","left",65536,10),                   "set"=>array("S","left",64,15));

    # N = TypeClass Numeric   # D = TypeClass Date   # S = TypeClass String   # M = TypeClass Memo   # O = TypeClass Object   # L = TypeClass Link   # E = TypeClass eMail

    $_split1= preg_split('#(#',$_colinfo["Type"]);   $_split2= preg_split('#)#',$_split1[1]);

    $_split["type"]=trim($_split1[0]);

    if(!isset($_types[$_split["type"]])) return false;

    $_split["set"]=trim($_split2[0]);

    if ($_split["set"]{0} == chr(39))   {     $_split["set"] = explode(",",str_replace(chr(39),"",$_split["set"]));     $_split["default"] = explode(",",$_colinfo["Default"]);   }   else   {     $_num = explode(",",$_split["set"]);     $_split["len"] = $_num[0];     $_split["dec"] = $_num[1];     $_split["set"] = false;     $_split["default"] = $_colinfo["Default"];   }

    $_split["rem"]=trim($_split2[1]);

    $_colinfo["Type"]      = $_split["type"];             # Nominaltyp   $_colinfo["TypeClass"] = $_types[$_split["type"]][0]; # Typoberklasse   $_colinfo["Len"]       = $_split["len"];              # Länge des Feldes gesamt   $_colinfo["Dec"]       = $_split["dec"];              # Dezimalstellen   $_colinfo["Rem"]       = $_split["rem"];              # nur unsigned   $_colinfo["Set"]       = $_split["set"];              # Wertearray  für enum und set   #$_colinfo["Rel"]                       # Relation zu welcher Tabelle table.field   #$_colinfo["Null"]                      # Nullwerte erlaunt = 'YES'   #$_colinfo["Key"]                       # Index-Typ: PRI, MUL, UNI   $_colinfo["Default"]  = $_split["default"];        # Defaultwert(e) für das Feld   #$_colinfo["Extra"]                     # z.T. nur 'auto_increment'

    if ($_colinfo["Len"] == 0)   {     $_colinfo["Len"] = $_types[$_split["type"]][2];     $_colinfo["Cols"] = $_types[$_split["type"]][3];   }   else   {     $_colinfo["Cols"] = $_colinfo["Len"];   }

    if(($_colinfo["Type"] == "enum") or ($_colinfo["Type"] == "set"))   {     $_colinfo["Cols"] = $_types[$_split["type"]][3];   }

    $_colinfo["Style"]["text-align"] = $_types[$_split["type"]][1]; #'style="align:right"' für num-Werte

    return $_colinfo; }

    #-------------------------------------------------------------------- function get_info($con,$table) {   if (!$con) return false;   if (strlen($table) == 0) return false;

    $sql = "show columns from $table";   $res = mysql_query($sql,$con);

    if (!$res) return false;

    $info = array();   while ($rec = mysql_fetch_assoc($res))   {     $field=$rec["Field"];     $info[$field]=split_types($rec);   }   mysql_free_result($res);

    return $info; } #-------------------------------------------------------------------------

    Aufruf durch $_info = get_info($con,$table);

    Dann steht ein Array zur Verfügung:

    $_info[Fieldname1]["Field"]                   ["Type"]                   ["Len"]                   ["Dez"]                   ...

    $_info[Fieldname2]["Field"]                   ["Type"]                   ["Len"]                   ["Dez"]                   ...

    ["Field"] enthält den eigenen Feldnamen, der ja in [Fieldname_x] schon Index ist, absichtlich nochmal. Denn zur Abarbeitung in Schleifen wird er häufig nochmals benötigt und wenn man dann als Attribut an die jeweilige Funktion nur $_info[Fieldname_x] übergeben hat, ist ja der Key verloren.

    Musst einfach mal damit spielen und mal

    <?

    $con = mysql_connect($host,$user,$password); $db  = Mysql_select_db($dbname);

    get_info($con,$table); echo "<pre>"; print_r($_info"); echo "<pre>"; ?>

    in ein Script packen...

    Verbesserungsvorschläge nehme ich dankend entgegen. Ich knabber gerade noch an der Ergänzung von [Style] und Angaben wie [Rows], [Cols] etc. uind dann aus den Angaben später die Übersichtsliste (du hast sie ja schon gesehen) und die Detailansicht zu erstellen. Es können aber immer nur feldbezogene Größen enthalten sein im Array, da der Hauptindex ja der Feldname ist und der fast jeden Wert annehmen könnte - mit Ausnahme der in MySQL reservierten Wörter.

    Es fehlen dann noch Angaben zu Feld-Relationen zu anderen Tables...

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen