Autor | Zpráva | ||
---|---|---|---|
final Profil |
Zdravím, neviem si už rady..
$var="1,2"; $values=split(",",$var); $sql = sprintf('update table set value=1 where id in (%s)',implode(',', array_fill(0, count($values), '?'))); echo $sql; // update table set value=1 where id in(?,?) $stmt = $db->prepare($sql); foreach ($values as $value) { $str=$str."i"; } echo $str."-".implode(',',$values); // ii-1,2 $stmt->bind_param('$str', implode(',',$values)); $stmt->execute(); mysqli_stmt::bind_param() [<a href='mysqli-stmt.bind-param'>mysqli-stmt.bind-param</a>]: Number of elements in type definition string doesn't match number of bind variables in Nejaký nápad? ďakujem |
||
Kajman Profil |
#2 · Zasláno: 4. 1. 2013, 15:55:39
Na řádku 10 máte navíc uvozovky kolem $str.
|
||
final Profil |
#3 · Zasláno: 5. 1. 2013, 10:30:08
Odstránil som ich a error ostáva ten istý..
|
||
Tori Profil |
#4 · Zasláno: 5. 1. 2013, 11:25:19
final:
Správně byste měl hodnoty zadat každou zvlášť jako parametr: $val1 = 1; $val2 = 2; $stmt->bind_param($str, $val1, $val2); |
||
Mike8748 Profil |
#5 · Zasláno: 5. 1. 2013, 11:27:32
final:
na řádku 10 jako první parametr předáváte "ii", tedy funkce očekává další dva parametry (typ integer). ovšem ty dál předáváš pouze jeden parametr, typu string proto ta chyba. |
||
Tori Profil |
#6 · Zasláno: 5. 1. 2013, 11:28:24
Koukněte se do komentářů k bind_param, jsou tam nějaké použitelné možnosti (např. přes reflexi).
|
||
final Profil |
#7 · Zasláno: 5. 1. 2013, 11:53:31
Tori:
začína sa mi nepozdávať celé mysqli, je dibi lepšia voľba? |
||
Tori Profil |
A co pro vás znamená „lepší“? Jinak těžko porovnávat, když každé je na jiné úrovni. dibi může interně používat mysqli driver, ale i jiný. Když si napíšete vlastní vrstvu abstrakce nad mysqli, bude to teprv porovnavatelné.
Pro mě „dobrý“ znamená jednoduchý, snadno zapamatovatelný zápis; abych nemusela každý vstup explicitně escapovat; tolerantní vstup (hodnotu pro DATE / DATETIME můžu zadat jako číslo, řetězec i DateTime instanci); užitečné pomůcky pro načtení dat přesně ve tvaru, v jakém je potřebuju. Určitě bude i něco jiného, co by mi vyhovovalo taky, ale na dibi jsem narazila nejdřív, tak už jsem dál nehledala. |
||
final Profil |
Tori:
dnes som si to ako tak naštudoval, určite to vyzerá lepšie ako mysqli.., mohol by som poprosiť o príklad ako by ten update vyzeral v dibi?lebo nenašiel som žiaden príklad na update viac riadkov edit: už mi došlo ako na to.. $num="1,2,3"; dibi::query("update messages set recipientDeleted=1 where id in($num)"); (ak by tam niečo bolo náhodou zle poprosím o opravu) |
||
Tori Profil |
final:
asi i takhle to jde: $ids = array(1, 2, 3); dibi::query("update `messages` set `recipientDeleted` = %i where `id` %in", 1, $ids); $ids = array(1, 2, 3); $novyStav = array('recipientDeleted' => true); dibi::query("update `messages` set ", $novyStav, "where `id` %in", $ids); $ids = array(1, 2, 3); $novyStav = array('recipientDeleted' => true); dibi::update("messages", $novyStav)->where("id %in", $ids)->execute(); Koukněte ještě na tohle srovnání, jak vypadají tytéž dotazy v různých DB vrstvách: SQL Cross Queries |
||
final Profil |
#11 · Zasláno: 6. 1. 2013, 13:31:44
Ďakujem
|
||
final Profil |
#12 · Zasláno: 6. 1. 2013, 15:16:01
mohol by som ešte poprosiť o vysvetlenie v tomto?
$result = dibi::query("select nieco1,nieco2 from table where id='1'"); $row = $result->fetchAll(); print_r($row); //Array ( [0] => DibiRow Object ( [nieco1] => a [nieco2] => b ) ) $row[0]['nieco1'] a nie v tvare $row['nieco1'] ?
|
||
Tori Profil |
#13 · Zasláno: 6. 1. 2013, 15:16:45 · Upravil/a: Tori
final:
fetchAll vrací všechny řádky. fetch() vrací jen první. viz: http://phpfashion.com/dibi-pokrokovy-databazovy-layer#toc-ziskavani-vysledku, http://phpfashion.com/temer-v-cili-dibi-0-9b#toc-3-zapouzdrit-result-set-a-asistovat-pri-zpracovani |
||
final Profil |
#14 · Zasláno: 6. 1. 2013, 15:28:09
Tori:
ďakujem posledný krát, to už je všetko :) |
||
Časová prodleva: 11 let
|
0