"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

php Insert into problem

Red 14.06.2004 - 18:59 1154 26
Posts

Römi

Hausmeister
Avatar
Registered: Feb 2001
Location: Bez. Tulln
Posts: 5304
Das mit dem String Verketten ist imo ned notwendig, zumindest bei mir gehts auch so:

"INSERT INTO galerie (ga_a_u_id, ga_name, ga_text, ga_anzeige) VALUES ('$ga_a_u_id', '$ga_name', '$ga_text', '$anzeige')"

semteX

begehrt die rostschaufel
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14596
ja klar gehts auch so. ist aber ned schön und bei arrays ungut zu handlen

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25423
Zitat
bei arrays ungut zu handlen
y?

semteX

begehrt die rostschaufel
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14596
klar du kannst es so machen: "blablabla $var[muh] schalalala";
wenn du aber z.b. var[muh1] var[muh2] funkts schon wieder ned =>
"blablablabla ".$var["muh".$lauf]." schalalalala";

done

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25423
klar, deshalb kann mans auch nicht verallgemeinern.

wollt nur wissen ob ich etwas nicht geschnallt hab :)

semteX

begehrt die rostschaufel
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14596
ist das: "blablabla $var[muh] schalalala"

eigentlich "korrekt"? ich mein es wird interprediert... aber das hat ja bekanntlich wenig zu bedeuten

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25423
sicher ist das korrekt.

das einzige, dass jetzt noch hinzuzufügen wäre um ein php-stringhandling faq zu komplettieren, wäre der grenzfall "schalalalala {$var}in the morning" :)

dio

Here to stay
Registered: Nov 2002
Location: Graz
Posts: 4890
Zitat von Römi
Das mit dem String Verketten ist imo ned notwendig, zumindest bei mir gehts auch so:

"INSERT INTO galerie (ga_a_u_id, ga_name, ga_text, ga_anzeige) VALUES ('$ga_a_u_id', '$ga_name', '$ga_text', '$anzeige')"
jo und was machst wennst a array insertn willst? dann wirds SO _nicht_ gehn :) da kommst um die punkte nicht umhin. ich ziehs vor, es lieber immer so zu machn, als einmal zu vergessn :) funktioniert auch so.

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4453
Die punkte brauchst du nicht, du kannst ja { und } nehmen:

Code: PHP
$sql = "INSERT INTO foo(a,b) VALUES('{$array['index']}', '{$object->property}')";
Aber sauber ists sowieso ueber sprintf (imho):
Code: PHP
$sql = sprintf("INSERT INTO foo(a,b) VALUES('%s', '%s')",
  $array['index'],
  $object->property
);
Das ganze ist dann nicht so eine unverdaubare String-Wurscht.
Bei Zahlen kommt auch ein gewisse Sicherheit mit, das kein String unabsichtlich reinrutscht
Code: PHP
$sql = sprintf("INSERT INTO foo(num) VALUE(%d)",
  $kannAuchStringSeinTrotzdemKeinSQLError
);
Ums ueberpruefen der Werte kommt man aber eh' nie rum.

Facetious

Addicted
Avatar
Registered: Oct 2003
Location: Wien
Posts: 406
aber mit arrays gehts glaub ich auch

Code: PHP
"INSERT INTO tmp SET bla = 'result[nix]'"

also bei mir funkts halt immer

lg Facetious

gue

Addicted
Avatar
Registered: Feb 2003
Location: Linz
Posts: 400
Zitat von semteX
ist das: "blablabla $var[muh] schalalala"

eigentlich "korrekt"? ich mein es wird interprediert... aber das hat ja bekanntlich wenig zu bedeuten
Es geht in den meisten Fällen so, wie du es dir wünschst, kann aber auch zu Problemen führen.

Wird z.B. folgendes Codestück interpretiert:
Code:
<?
define("MUH", "bla");

$arr = array("MUH" => "1", "bla" => "2");
echo "$arr[MUH]   <br>";
echo $arr[MUH] . "<br>";
echo "${arr[MUH]} <br>";
echo "... ".$arr['MUH']. " ...";
?>
So ergibt sich folgende Ausgabe:
Code:
1 
2
2 
... 1 ...
Das hängt damit zusammen, dass PHP "Konstanten", die es nicht kennt, einfach zu Strings umwandelt, die den Namen der Konstanten enthalten. Ich würde also damit vorsichtig sein und es lieber "sauber" mit .$arr['MUH']. machen ;)

dio

Here to stay
Registered: Nov 2002
Location: Graz
Posts: 4890
Zitat von Rektal
Die punkte brauchst du nicht, du kannst ja { und } nehmen:

Code: PHP
$sql = "INSERT INTO foo(a,b) VALUES('{$array['index']}', '{$object->property}')";
Aber sauber ists sowieso ueber sprintf (imho):
Code: PHP
$sql = sprintf("INSERT INTO foo(a,b) VALUES('%s', '%s')",
  $array['index'],
  $object->property
);
Das ganze ist dann nicht so eine unverdaubare String-Wurscht.
Bei Zahlen kommt auch ein gewisse Sicherheit mit, das kein String unabsichtlich reinrutscht
Code: PHP
$sql = sprintf("INSERT INTO foo(num) VALUE(%d)",
  $kannAuchStringSeinTrotzdemKeinSQLError
);
Ums ueberpruefen der Werte kommt man aber eh' nie rum.
ich pers. seh aber keine notwendigkeit sprintf oä zu verwenden, die schreibweise mit den { } war mir nicht bekannt, find sie aber nicht wirklich "ansprechend". mit . funktionierts fein, hab noch nie probleme damit ghabt und deshalb is es für mich "der richtige lösungsweg" :).
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz