日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

php bindresult,mysqli_stmt::bind_result

發布時間:2025/3/15 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php bindresult,mysqli_stmt::bind_result 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用戶評論:

[#1]

kaspy at example dot com [2015-03-05 18:31:32]

For?those?of?you?trying?to?bind?rows?into?array,

$stmt=$db->prepare('SELECT?id,?name,?mail,?phone,?FROM?contacts');$stmt->execute();$stmt->store_result();$stmt->bind_result($arr['id'],$arr['name'],$arr['mail'],$arr['phone']);

while?($stmt->fetch())?{$outArr[]?=$arr;

}$stmt->close();

return$outArr;?>

this?will?give?you?all?the?rows?you?asked?for?except?that?they?would?all?be?the?same?as?the?first?one?because?of?some?gremlins?in?the?background?code?(i've?heard?that?PHP?is?trying?to?save?memory?here).

But?this?one?works:

$stmt=$db->prepare('SELECT?id,?name,?mail,?phone,?FROM?contacts');$stmt->execute();$stmt->store_result();$stmt->bind_result($a,$b,$c,$d);

while?($stmt->fetch())?{$outArr[]?=?['id'=>$a,'name'=>$b,'mail'=>$c,'phone'=>$d];

}$stmt->close();

return$outArr;?>

Just?don't?use?arrays?to?bind?results?:)

[#2]

Masterkitano [2015-02-20 03:53:19]

for?people?who?doesn't?have?the?mysqlInd?driver?or?for?some?reason?just?can't?use?the?stmt->get_result,?I've?made?this?function?which?allows?you?to?"mimic"?the?mysqli_result::fetch_assoc:

function?fetchAssocStatement($stmt)

{

if($stmt->num_rows>0)

{

$result?=?array();

$md?=?$stmt->result_metadata();

$params?=?array();

while($field?=?$md->fetch_field())?{

$params[]?=?&$result[$field->name];

}

call_user_func_array(array($stmt,?'bind_result'),?$params);

$stmt->fetch();

return?$result;

}

return?null;

}

you?can?use?it?in?a?while?sentence?to?fetch?and?return?an?assoc?array?from?the?statement?(as?long?as?the?statement?is?open):

usage:

$statement?=?$mysqli->prepare($query));

$statement.execute();

while($rowAssocArray?=?fetchAssocStatement($statement))

{

//do?something

}

$statement.close();

hope?this?helps.

[#3]

timchampion dot NOSPAM at gmail dot com [2012-02-20 19:29:23]

Just?wanted?to?make?sure?that?all?were?aware?of?get_result?for?those?needing?the?result?in?array?format.

In?the?code?sample,?after?execute(),?perform?a?get_result()?like?this:

<?php //?...?this?document's?example?code:$stmt->execute();/*?instead?of?bind_result:?*/$result=$stmt->get_result();/*?now?you?can?fetch?the?results?into?an?array?-?NICE?*/while?($myrow=$result->fetch_assoc())?{printf("%s?%s\n",$myrow['Code'],$myrow['Name']);

}?>

This?is?much?nicer?when?you?have?a?dozen?or?more?fields?coming?back?from?your?query.??Hope?this?helps.??Also,?as?noted?in?the?comments?for?get_result,?it?requires?mysqlnd.

[#4]

dev+php at alepe dot com [2011-07-25 22:31:33]

According?to?the?above?documentation:

"Depending?on?column?types?bound?variables?can?silently?change?to?the?corresponding?PHP?type.?"

if?you?specify?a?field?as?int?(tinyint,?mediumint,?etc.)?with?zerofill?property,?it?will?be?converted?(silently)?to?PHP?integer?(erasing?the?leading?zeros).?In?order?to?keep?those?leading?zeros,?one?solution?is?to?specify?the?field?as?decimal.

Note?that?this?only?happens?when?using?prepared?statements?and?not?when?executing?the?query?directly.

[#5]

scragar at gmail dot com [2011-06-16 00:02:53]

To?clarify?for?anyone?having?problems?with?arrays,?PHP?will?automatically?pass?arrays?as?references,?cloning?the?array?if?needed?in?the?event?of?setting?or?unsetting?a?part?of?it,?changing?a?referenced?variable?does?not?trigger?cloning.

This?is?done?for?efficiency,?to?clone?an?array?containing?this?information?you?may?either?use?a?foreach?loop,?or?set/unset?a?key.?Techniques?like?array_values?will?also?work?provided?you?don't?mind?losing?your?keys.

[#6]

nieprzeklinaj at gmail dot com [2011-02-01 01:02:02]

I?wrote?a?function?that?fetches?all?rows?from?a?result?set?-?either?normal?or?prepared.

{$array=?array();

if($resultinstanceofmysqli_stmt)

{$result->store_result();$variables=?array();$data=?array();$meta=$result->result_metadata();

while($field=$meta->fetch_field())$variables[]?=?&$data[$field->name];//?pass?by?referencecall_user_func_array(array($result,'bind_result'),$variables);$i=0;

while($result->fetch())

{$array[$i]?=?array();

foreach($dataas$k=>$v)$array[$i][$k]?=$v;$i++;//?don't?know?why,?but?when?I?tried?$array[]?=?$data,?I?got?the?same?one?result?in?all?rows}

}

elseif($resultinstanceofmysqli_result)

{

while($row=$result->fetch_assoc())$array[]?=$row;

}

return$array;

}?>

Simply?call?it?passing?a?result?set?or?executed?statement?and?you'll?get?all?rows?fetched.

[#7]

quano [2010-12-23 04:19:26]

If?I?have?a?longtext?field?in?the?result,?the?whole?page?will?go?blank,?without?giving?me?any?errors?what?so?ever.?This?is?because?PHP?_crashes_.?I've?spent?an?entire?morning?figuring?this?out.

Apparently,?if?you?have?longtext?present,?you?HAVE?to?call?store_result?before?using?bind_result.

http://bugs.php.net/bug.php?id=47928

[#8]

pcc at pccglobal dot com [2010-07-31 19:06:34]

If?done?properly,?'call_user_func_array()'?works?to?bind?variables?to?a?result?of?multiple?columns?including?BLOB?columns.

EXAMPLE:

$data=?array()?;//?Array?that?accepts?the?data.$params=?array()?;//?Parameter?array?passed?to?'bind_result()'$column=?array("fidentity","fvarchar","fdate","ftinyblob")?;//?The?column?names.foreach($columnas$col_name)

{//?'fetch()'?will?assign?fetched?value?to?the?variable?'$data[$col_name]'$params[]?=&$data[$col_name]?;

}$res=call_user_func_array(array($stmt,"bind_result"),$params)?;?>

Here's?the?complete?example.

WARNING:?When?using?'prepare'?to?prepare?a?statement?to?retrieve?LOBs?the?method?order?matters.

Also,?method?'store_result()'?must?be?called?and?be?called?in?correct?order.

Failure?to?observe?this?causes?PHP/MySQLi?to?crash?or?return?an?erroneous?value.

The?proper?procedure?order?is:?prepare?->?execute?->?store_result?->?bind?->?fetch

$database="test";$table="test";$column=?array("fidentity","fvarchar","fdate","ftinyblob")?;$select_set="`fidentity`,?`fvarchar`,?`fdate`,?`ftinyblob`";$mysqli=?newmysqli("localhost","root",$password,$database);//?Proper?procedure?order:?prepare?->?execute?->?store_result?->?bind?->?fetch$stmt=$mysqli->prepare("SELECT$select_setFROM?`$table`")?;$stmt->execute();$stmt->store_result();$data=?array()?;//?Array?that?accepts?the?data.$params=?array()?;//?Parameter?array?passed?to?'bind_result()'foreach($columnas$col_name)

{//?Assign?the?fetched?value?to?the?variable?'$data[$name]'$params[]?=&$data[$col_name]?;

}$res=call_user_func_array(array($stmt,"bind_result"),$params)?;

if(!$res)

{

echo"bind_result()?failed:?".$mysqli->error."\n";

}

else

{$res=$stmt->fetch()?;

if($res)

{

echo"

".htmlentities(print_r($data,true))?."\n";

}

else

{

echo?((false!==$res)??"End?of?data":$stmt->error)?."\n";

}

}$stmt->close()?;$mysqli->close()?;

exit?;?>

The?above?example?should?output:

Array?(

[fidentity]?=>?24

[fvarchar]?=>?the?rain?in?spain

[fdate]?=>?2010-07-31

[ftinyblob]?=>?GIF89a...(more?BLOB?data)

)

[#9]

swissbob2 at yahoo dot co dot uk [2010-06-28 04:08:03]

I?discovered?this?one?by?accident;?mysqli_stmt_bind_result?overwrites?an?*existing*?session?variable?of?the?same?name?(but?doesn't?create?them).

In?other?words,

mysqli_stmt_bind_result($stmt,?$col1,?$col2);

will?overwrite?session?variables?$_SESSION['col1']?and?$_SESSION['col2']?if?they?exist,?but?will?not?create?them?if?they?don't.

[#10]

uramihsayibok, gmail, com [2009-07-27 13:35:44]

A?note?to?people?to?want?to?return?an?array?of?results?-?that?is,?an?array?of?all?the?results?from?the?query,?not?just?one?at?a?time.

while?($mysqli_stmt_object->fetch())?{$results[]?=$byref_array_for_fields;

}?>

This?will?NOT?work.?$results?will?have?a?bunch?of?arrays,?but?each?one?will?have?a?reference?to?$byref.

PHP?is?optimizing?performance?here:?you?aren't?so?much?copying?the?$byref?array?into?$results?as?you?are?*adding*?it.?That?means?$results?will?have?a?bunch?of?$byrefs?-?the?same?array?repeated?multiple?times.?(So?what?you?see?is?that?$results?is?all?duplicates?of?the?last?item?from?the?query.)

hamidhossain?(01-Sep-2008)?shows?how?to?get?around?that:?inside?the?loop?that?fetches?results?you?also?have?to?loop?through?the?list?of?fields,?copying?them?as?you?go.?In?effect,?copying?everything?individually.

Personally,?I'd?rather?use?some?kind?of?function?that?effectively?duplicates?an?array?than?write?my?own?code.?Many?of?the?built-in?array?functions?don't?work,?apparently?using?references?rather?than?copies,?but?a?combination?of?array_map?and?create_function?does.

while?($mysqli_stmt_object->fetch())?{//?array_map?will?preserve?keys?when?done?here?and?this?way$results[]?=array_map($copy,$byref_array_for_fields);

}?>

All?these?problems?would?go?away?if?they?just?implemented?a?fetch_assoc?or?even?fetch_array?for?prepared?statements...

[#11]

Miguel Hatrick [2009-07-17 09:18:22]

Took?some?cool?code?from?here?and?made?a?little?class?for?those?object?oriented?kind?of?guys

used?like?this:

<?php //?execute?prepared?statement$stmt->execute();$stmt->store_result();//custom?class?:D?bind?to?Statement?Result?mambo?jambo!$sr=?newStatement_Result($stmt);$stmt->fetch();printf("ID:?%d\n",$sr->Get('id')?);/classStatement_Result{

private$_bindVarsArray=?array();

private$_results=?array();

public?function__construct(&$stmt)

{$meta=$stmt->result_metadata();

while?($columnName=$meta->fetch_field())$this->_bindVarsArray[]?=?&$this->_results[$columnName->name];call_user_func_array(array($stmt,'bind_result'),$this->_bindVarsArray);$meta->close();

}

public?functionGet_Array()

{

return$this->_results;

}

public?functionGet($column_name)

{

return$this->_results[$column_name];

}

}?>

[#12]

atulkashyap1 at hotmail dot com [2009-04-25 03:31:24]

bind_?result?can?also?be?used?to?return?an?array?of?variables?from?a?function,

This?took?me?a?long?time?to?figure?out,?so?I?would?like?to?share?this.

FROM?updates

ORDER?BY?date?DESC

LIMIT?5?";

if($stmt=$this->conn->prepare($query))?{$stmt->execute();$stmt->bind_result($updates[0],$updates[1],$updates[2],$updates[3]);$i=0;

while($stmt->fetch()){$i++;$name='t'.$i;

$$name=?array($updates[0],$updates[1],$updates[2],$updates[3]);

}

return?array($t1,$t2,$t3,$t4,$t5,);$stmt->close();

}

}?>

[#13]

hamidhossain at gmail dot com [2008-09-01 07:07:39]

lot?of?people?don't?like?how?bind_result?works?with?prepared?statements!?it?requires?you?to?pass?long?list?of?parameters?which?will?be?loaded?with?column?value?when?the?function?being?called.

To?solve?this,?i?used?call_user_func_array?function?and?result_metadata?functions.?which?make?easy?and?automatically?returns?an?array?of?all?columns?results?stored?in?an?array?with?column?names.

please?don't?forget?to?change?setting?variables?with?your?own?credentials:

$host='localhost';$user='root';$pass='1234';$data='test';$mysqli=?newmysqli($host,$user,$pass,$data);/*?check?connection?*/if?(mysqli_connect_errno())?{printf("Connect?failed:?%s\n",mysqli_connect_error());

exit();

}

if?($stmt=$mysqli->prepare("SELECT?*?FROM?sample?WHERE?t2?LIKE??"))?{$tt2='%';$stmt->bind_param("s",$tt2);$stmt->execute();$meta=$stmt->result_metadata();

while?($field=$meta->fetch_field())

{$params[]?=?&$row[$field->name];

}call_user_func_array(array($stmt,'bind_result'),$params);

while?($stmt->fetch())?{

foreach($rowas$key=>$val)

{$c[$key]?=$val;

}$result[]?=$c;

}$stmt->close();

}$mysqli->close();print_r($result);?>

[#14]

bb at servertje dot nl [2008-02-23 15:24:41]

Although?inspired?by?an?earlier?post,?this?method?could?be?added?to?any?of?your?database?objects.?It's?an?object?oriented?implementation?of?an?earlier?post.

The?method?returns?an?array?with?objects?representing?a?row.?Each?property?represents?a?column?and?its?value.

{$result=?array();$metadata=$stmt->result_metadata();$fields=$metadata->fetch_fields();

for?(;;)

{$pointers=?array();$row=?newstdClass();$pointers[]?=$stmt;

foreach?($fieldsas$field)

{$fieldname=$field->name;$pointers[]?=?&$row->$fieldname;

}call_user_func_array(mysqli_stmt_bind_result,$pointers);

if?(!$stmt->fetch())

break;$result[]?=$row;

}$metadata->free();

return$result;

}?>

[#15]

thejkwhosaysni at gmail dot com [2005-10-19 13:12:06]

I've?created?these?functions?which?will?act?like?mysqli_fetch_array()?and?mysqli_fetch_object()?but?work?with?bound?results.

<?phpfunctionfetch_object ()?{$data=mysqli_stmt_result_metadata($this->stmt);$count=1;//start?the?count?from?1.?First?value?has?to?be?a?reference?to?stmt.$fieldnames[0]?=?&$this->stmt;$obj=?newstdClass;

while?($field=mysqli_fetch_field($data))?{$fn=$field->name;//get?all?the?feild?names$fieldnames[$count]?=?&$obj->$fn;//load?the?fieldnames?into?an?object..$count++;

}call_user_func_array(mysqli_stmt_bind_result,$fieldnames);mysqli_stmt_fetch($this->stmt);

return$obj;

}

functionfetch_array()?{$data=mysqli_stmt_result_metadata($this->stmt);$count=1;//start?the?count?from?1.?First?value?has?to?be?a?reference?to?the?stmt.?because?bind_param?requires?the?link?to?$stmt?as?the?first?param.$fieldnames[0]?=?&$this->stmt;

while?($field=mysqli_fetch_field($data))?{$fieldnames[$count]?=?&$array[$field->name];//load?the?fieldnames?into?an?array.$count++;

}call_user_func_array(mysqli_stmt_bind_result,$fieldnames);mysqli_stmt_fetch($this->stmt);

return$array;

}?>

Hope?this?helps?some?people,?I?was?puzzled?by?this?for?a?while.

[#16]

andrey at php dot net [2005-10-07 05:38:42]

If?you?select?LOBs?use?the?following?order?of?execution?or?you?risk?mysqli?allocating?more?memory?that?actually?used

1)prepare()

2)execute()

3)store_result()

4)bind_result()

If?you?skip?3)?or?exchange?3)?and?4)?then?mysqli?will?allocate?memory?for?the?maximal?length?of?the?column?which?is?255?for?tinyblob,?64k?for?blob(still?ok),?16MByte?for?MEDIUMBLOB?-?quite?a?lot?and?4G?for?LONGBLOB?(good?if?you?have?so?much?memory).?Queries?which?use?this?order?a?bit?slower?when?there?is?a?LOB?but?this?is?the?price?of?not?having?memory?exhaustion?in?seconds.

[#17]

brad dot jackson at resiideo dot com [2005-03-22 09:10:39]

A?potential?problem?exists?in?binding?result?parameters?from?a?prepared?statement?which?reference?large?datatypes?like?mediumblobs.??One?of?our?database?tables?contains?a?table?of?binary?image?data.??Our?largest?image?in?this?table?is?around?50Kb,?but?even?so?the?column?is?typed?as?a?mediumblob?to?allow?for?files?larger?than?64Kb.??I?spent?a?frustrating?hour?trying?to?figure?out?why?mysqli_stmt_bind_result?choked?while?trying?to?allocate?16MB?of?memory?for?what?should?have?been?at?most?a?50Kb?result,?until?I?realized?the?function?is?checking?the?column?type?first?to?find?out?how?big?a?result?_might_?be?retrieved,?and?attempting?to?allocate?that?much?memory?to?contain?it.??My?solution?was?to?use?a?more?basic?mysqli_result()?query.??Another?option?might?have?been?to?retype?the?image?data?column?as?blob?(64Kb?limit).

總結

以上是生活随笔為你收集整理的php bindresult,mysqli_stmt::bind_result的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。