Tom: MySQL >=5.1 und automatischer Timestamp bei Insert

Beitrag lesen

Hello Vinzenz,

gleich noch eine weitere Frage im Nachtrag. Es geht dann schlussendlich darum

  • welche Spaltentypen quotierte Daten zwingend erforderlich machen
  • welche Spaltentypen quotierte Daten zulassen, aber auch ohne arbeiten
  • welche Spaltentypen keine quotierten Daten zulassen

das ist ziemlich irrelevant, wenn man hübsch mit Prepared Statements arbeitet.

Das sollte an dieser Stelle nicht geschehen, aber danke für den Hinweis.
Für die Historie wird nachher das komplett fertiggestellte SQL-Query abgespeichert. Da wüsste ich jetzt nicht, wie ich das mit prepared Statements hinbekommen könnte.

siehe Handbuch
http://dev.mysql.com/doc/refman/5.1/en/literals.html

im Handbuch lese ich dauernd :-O

Aber es ist mir leider immer noch nicht ganz klar, welche Spaltentypen nun quoted werden MÜSSEN.
Hier mal die Funktionsgruppe, aus der mein Anliegen hervorgeht. Die dritte Funktion ist die wesentliche. Ich befürchte, bei Binary, Blob & Co. habe ich es falsch gemacht?

Es fehlt da noch diverse Dinge; hier geht es jetzt erstmal nur um das Quoting.

#-----------------------------------------------------------------------------------
function db_get_column_info($con, $tablename)
{

$sql = "select column\_name, data\_type
            from information\_schema.COLUMNS
            where table\_name = '$tablename'";

if ($res = mysqli_query($con, $sql))
    {
        $_list = array();

while($_colinfo = mysqli_fetch_assoc($res))
        {
            $_list[$_colinfo['column_name']] = $_colinfo['data_type'];
        }

# lower the key names and return them
        return array_change_key_case ($_list);
    }

return false;

}
#-----------------------------------------------------------------------------------
function db_escape_values($con, $_data)
{
    if(!is_array($_data)) { return false; }

foreach($_data as $key => $value)
    {
        $_data[$key] = mysqli_real_escape_string($con, $value);
    }

return $_data;
}
#-----------------------------------------------------------------------------------
function db_quote_values($con, $tablename, $_escaped_data)
{
    if (!$_typeinfo = db_get_column_info($con, $tablename)) { return false; }
    if (!is_array($_escaped_data)) {return false; }

$_escaped_data = array_change_key_case ($_escaped_data);

foreach($_escaped_data as $key => $data)
    {
        if (!isset($_typeinfo[$key])) { return false; }

switch ($_typeinfo[$key])
        {
            case 'tinyint':
            case 'smallint':
            case 'mediumint':
            case 'int':
            case 'bigint':
            case 'bit':

# no quoting

break;

case 'float':
            case 'double':
            case 'decimal':

# no quoting

break;

case 'char':
            case 'varchar':
            case 'tinytext':
            case 'text':
            case 'mediumtext':
            case 'longtext':

# qoute it!
                $_escaped_data[$key] = "'$data'";

break;

case 'binary':
            case 'varbinary':
            case 'tinyblob':
            case 'blob':
            case 'mediumblob':
            case 'longblob':

# no quoting

break;

case 'date':
            case 'time':
            case 'year':
            case 'datetime':

$_escaped_data[$key] = "'$data'";

break;

case 'timestamp':

$_escaped_data[$key] = "from_unixtime($_escaped_data[$key])";

break;

case 'enum':
            case 'set':

$_escaped_data[$key] = "'$data'";

break;

default:

## Datatype not recognized
                return false;
        }
    }

return $_escaped_data;
}
#-----------------------------------------------------------------------------------

Wäre nett, wenn Du deinen Kommentar mal in die dritte Funktion schreiben könntest.

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de