Re: [tbs-dev] TbsSQL class - numerical array result ?? [erratum]

From : skrol29dev@... , the 6th October 2010 11:06
  • 2010-10-06 11:06:02 — skrol29dev@... - Re: [tbs-dev] TbsSQL class - numerical array result ?? [erratum]

Sorry: ************* Replace your sql string:   "SELECT `$this->field` FROM `$this->tableName` WHERE $this->pk = '$this->id'" with:   "SELECT `$this->field` AS `0` FROM `$this->tableName` WHERE $this->pk = '$this->id'" And then MySQL will return the same value with the column name '0', and this will be taken for PHP as an array with ************* By the way, I'm now back on TbSQL to fix the last remarks and bugs we have in the stack. Regards, Skrol29 -----Message d'origine----- De : Skrol29 [mailto:skrol29dev@...]  Envoyé : mercredi 6 octobre 2010 10:29 À : 'TBS dev' Objet : Re: [tbs-dev] TbsSQL class - numerical array result ?? Hi TomH, There is a simple and smart workaround  in your case because your query seems to have only one field to return. Replace your sql string:   "SELECT `$this->field` FROM `$this->tableName` WHERE $this->pk = '$this->id'" with:   "SELECT `$this->field` FROM `$this->tableName` AS `0` WHERE $this->pk = '$this->id'" And then MySQL will return the same value with the column name '0', and this will be taken for PHP as an array with key 0.   In case the property $this->field may have several fields separated with comas, then you can still build you enumerated field list with the following trick: $x = $this->field; $p=-1; $n=0; do {$p=strpos($x,',',$p+1); if ($p!==false) {$w = '` AS `'.$n.'`,`'; $x=substr_replace($x, $w, $p, 1); $p=$p+strlen($w); $n++;} } while ($p!==false); $x .= '` AS `'.$n; This is hard to read but you're guessing that, for instance, if $this->field = 'a,b,c' Then $x will be equal to '`a AS `0`,`b` AS `1`,`c` AS `2'; The first en last '`' are voluntary omitted because they are add later by your SQL construction. As you can see, I'm reluctant to add ARRAN_N feature, this is because I think it is a deprecated usage. It is very rare to need it and workarounds are quite simple. The PHP documentation says that fetching record with column names is as fast as with indexes. Regards, Skrol29 -----Message d'origine----- De : TomH [mailto:tom@...] Envoyé : mercredi 6 octobre 2010 01:23 À : tinybutstrong-dev@... Objet : [tbs-dev] TbsSQL class - numerical array result ?? Hello Skrol29 I have found a situation while I was converting a form class from ezSQL to TbsSQL. The form class needs/expects the query result returned as a numerical array. Previously I was doing... $this->formData = $db->get_row("SELECT `$this->field` FROM `$this->tableName`  WHERE $this->pk = '$this->id'",ARRAY_N);   // this is the ezSQL class Now for TbsSQL I am doing... $this->formData = $Db->GetRow("SELECT `$this->field` FROM `$this->tableName` WHERE $this->pk = '$this->id'");   // do this for TbsSQL class I found that I can work around this by doing... $this->formData = array_values($this->formData); If I an missing some capability in TbsSQL that will produce the result as a numerical array, please advise me. Else, perhaps it is worth considering adding an additional row type... $Db->DefaultRowType(TBSSQL_NUMERIC); Sincere thanks for your consideration. And thanks for TBS every day, TomH _______________________________________________ TinyButStrong-dev@... - http://listes.rezo.net/mailman/listinfo/tinybutstrong-dev _______________________________________________ TinyButStrong-dev@... - http://listes.rezo.net/mailman/listinfo/tinybutstrong-dev