我想看一个如何调用使用bind_resultvs 的示例,以及get_result使用one over另一个的目的是什么.
也是使用每个的利弊.
使用任何一个的限制是什么,是否存在差异.
我在Ubuntu 10.04中遇到PHP问题.当我尝试使用mysqli_result :: fetch_all时出现此错误:
调用未定义的方法mysqli_result :: fetch_all()
但是,它适用于Windows XP.
代码:
$result = $this->dbh->query('SELECT [...] ');
return $result->fetch_all(MYSQLI_ASSOC);
Run Code Online (Sandbox Code Playgroud)
我不想在循环中使用fetch_assoc,因为我将结果发送到另一个层进行处理.
我使用的是PHP 5.4.4.和php -m | grep mysql mysqlnd模块它没有出现.我该如何安装?这可能是问题吗?
当我执行以下代码时(我正在调用具有5个IN参数和1个OUT参数的存储过程)
$conn->query("SET @res = ''");
$mysqli=$conn;
if (!($stmt = $mysqli->prepare("CALL retrieve_matches(5,3, 16, 2, false, @res)"))) {
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!$stmt->execute()) {
echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
do {
if ($res = $stmt->get_result()) { //Apache crash on this call
printf("---\n");
var_dump(mysqli_fetch_all($res));
mysqli_free_result($res);
} else {
if ($stmt->errno) {
echo "Store failed: (" . $stmt->errno . ") " . $stmt->error;
}
}
} while …Run Code Online (Sandbox Code Playgroud) 想知道我如何将PHP预处理语句的结果绑定到一个数组中然后我怎么去调用它们.例如这个查询
$q = $DBH->prepare("SELECT * FROM users WHERE username = ?");
$q->bind_param("s", $user);
$q->execute();
Run Code Online (Sandbox Code Playgroud)
这将返回结果的用户名,电子邮件和ID.想知道我是否可以将它绑定在一个数组中,然后将其存储在一个变量中,以便我可以在整个页面中调用它?
下面是一些写得不好且严重误解的PHP代码,没有错误检查.说实话,我正在努力让我的脑袋绕着PHP-> MySQLi函数的迷宫!有人可以提供一个示例,说明如何使用预准备语句收集关联数组中的结果,同时从$ stmt获取行数?下面的代码是我正在玩的东西.我认为让我失望的是使用$stmt后的值store_result,然后尝试收集一个关联数组,我不太清楚为什么......
$mysqli = mysqli_connect($config['host'], $config['user'], $config['pass'], $config['db']);
$stmt = $mysqli->prepare("SELECT * FROM licences WHERE generated = ?");
$stmt->bind_param('i', $core['id']);
$result = $stmt->execute();
$stmt->store_result();
if ($stmt->num_rows >= "1") {
while($data = $result->fetch_assoc()){
//Loop through results here $data[]
}
}else{
echo "0 records found";
}
Run Code Online (Sandbox Code Playgroud)
我觉得有点厚颜无耻只是要求代码,但它是我的情况的工作演示,我觉得我需要最终了解实际发生了什么.太感谢了!
我正在编写一个简单的测试脚本来了解MySQLi准备好的语句.该脚本将成为在处理结果时需要略微动态的函数的基础.我需要fetch方法作为一个类似于mysql_fetch_array()行为的数组返回.
我知道其中一些方法需要mysqlnd.我检查了phpinfo.Mysqlnd已安装并存在.见截图.

请注意,PDO在我的服务器上可用,但我需要在此时使用此脚本与MySQLi一起使用.!PDO将在本项目的后期进行研究.
require_once(__ROOT__ . '/config.inc.php');
$mysqli = new mysqli($config['db']['server'], $config['db']['username'], $config['db']['password'], $config['db']['database_name']);
$userid = 10;
$stmt = $mysqli->prepare("SELECT username, firstname, lastname FROM maj_user WHERE user_id < ?");
if ($stmt)
{
/* bind parameters for markers */
$stmt->bind_param('i', $userid);
/* execute query */
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_array())
{
echo 'We selected "' . $row['username'] . ' (' . $row['firstname'] . ' ' . $row['lastname'] . ')"' . PHP_EOL;
}
$result->close();
}
$mysqli->close();
Run Code Online (Sandbox Code Playgroud)
上面的代码导致:
致命错误 …
我正在尝试动态绑定mysql_stmt参数并在关联数组中获取结果.我在stackoverflow上找到了这篇文章,其中Amber发布了以下代码的答案:
原帖: 如何用准备好的语句制作一个合适的mysqli扩展类?
"假设你实际上想要编写自己的版本(而不是利用其他答案所建议的现有库之一 - 那些也是很好的选择)......
以下是一些您可能会发现有用的功能.第一个允许您将查询的结果绑定到关联数组,第二个允许您传入两个数组,一个是有序的键数组,另一个是这些键的数据的关联数组,并将数据绑定到准备好的声明:"
function stmt_bind_assoc (&$stmt, &$out) {
$data = mysqli_stmt_result_metadata($stmt);
$fields = array();
$out = array();
$fields[0] = $stmt;
$count = 1;
while($field = mysqli_fetch_field($data)) {
$fields[$count] = &$out[$field->name];
$count++;
}
call_user_func_array(mysqli_stmt_bind_result, $fields);
}
function stmt_bind_params($stmt, $fields, $data) {
// Dynamically build up the arguments for bind_param
$paramstr = '';
$params = array();
foreach($fields as $key)
{
if(is_float($data[$key]))
$paramstr .= 'd';
elseif(is_int($data[$key]))
$paramstr .= 'i';
else
$paramstr .= 's';
$params[] = $data[$key];
}
array_unshift($params, $stmt, …Run Code Online (Sandbox Code Playgroud) 由于我已经将我的网站移动到新的vServer,我总是收到此错误消息
Fatal error: Call to undefined method mysqli_stmt::get_result()
Run Code Online (Sandbox Code Playgroud)
这些代码行正常工作
$mysql = new mysqli($db_host, $db_user, $db_password, $db_database);
$partys = NULL;
$res_partys = $mysql->query("SELECT * FROM party ORDER BY begin");
while($row_partys = $res_partys->fetch_array()) {
$partys[] = $row_partys;
}
$count_reg = $mysql->prepare("SELECT COUNT(*) FROM guestlist WHERE partyid = ?");
$count_reg->bind_param('i', $party['partyid']);
$count_reg->execute();
Run Code Online (Sandbox Code Playgroud)
但$count_res = $count_reg->get_result();失败了.Mysqli支持已启用.
Accorind到一些互联网资源我需要PHP MySQL本机驱动程序,但我只在我的Debian 7机器上安装了php5-mysql,因为安装php5-mysqlnd via apt-get install php5-mysqlnd会自动删除Froxlor,这是我的服务器管理面板.
是否还有其他方法可以安装mysqlnd,除非通过apt-get download php5-mysqlnddpkg 下载并安装它,因为这会因为未满足的要求而在每次跟随apt-get调用时抛出错误,并从源代码编译PHP包括mysqlnd?
我对准备好的陈述很陌生,我不确定我是否做得对.
这是我尝试的:
$currgame = 310791;
$sql = "SELECT fk_player_id, player_tiles, player_draws, player_turn, player_passes, swapped FROM ".$prefix."_gameplayer WHERE fk_game_id = ?";
$stmt = $mysqli->stmt_init();
$data = array();
if($stmt->prepare($sql)){
$stmt->bind_param('i', $currgame);
$stmt->execute();
$fk_player_id = null; $player_tiles = null; $player_draws = null; $player_turn = null; $player_passes = null; $swapped = null;
$stmt->bind_result($fk_player_id, $player_tiles, $player_draws, $player_turn, $player_passes, $swapped);
$res = $stmt->get_result();
while ($row = $res->fetch_assoc()){
$data[] = $row;
}
$stmt->close();
}
// to display own games
foreach ($data as $row) {
if ($row['fk_player_id'] == …Run Code Online (Sandbox Code Playgroud) 我在准备好的陈述中列出评论时遇到了问题.有任何想法吗?
这是我的代码:
$fetchComments = $cnx -> prepare("SELECT comment FROM comments WHERE video_id=? LIMIT 1");
$fetchComments -> bind_param('s', $row['id']);
$fetchComments -> execute();
$fetchComments -> store_result();
$fetchComments -> bind_result($vid_comment);
if ($fetchComments -> num_rows > 0) {
whike ($row = mysqli_fetch_assoc($vid_comment)){
echo $row['comment'];
}
}
Run Code Online (Sandbox Code Playgroud)