php – 在longtext字段上准备好的mysqli select语句将返回空
发布时间:2020-12-13 18:03:19 所属栏目:PHP教程 来源:网络整理
导读:我有一个运行良好的数据库查询功能 – 除了我遇到了 mysqli预处理语句和longtext字段显然已知的问题.即使通过phpMyAdmin运行查询工作正常,longtext字段总是空的,会发生什么.根据 http://www.workinginboxershorts.com/php-mysqli-returns-empty-variables-fr
我有一个运行良好的数据库查询功能 – 除了我遇到了
mysqli预处理语句和longtext字段显然已知的问题.即使通过phpMyAdmin运行查询工作正常,longtext字段总是空的,会发生什么.根据
http://www.workinginboxershorts.com/php-mysqli-returns-empty-variables-from-longtext-column,将数据类型切换为文本可以解决问题.然而,在我的情况下,我真的更愿意离开这个领域,因为我可以预见这个额外空间有价值的时间.
我正在使用参数化查询,这显然是问题所在.这是我的功能: // Bind results to an array // $stmt = sql query,$out = array to be returned 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); } // DB Query // $query = SQL query,$params = array of parameters,$rs = whether or not a resultset is expected,$newid = whether or not to retrieve the new ID value; // $onedimensionkey = key required to convert array into simple one dimensional array function db_query($query,$params,$rs = true,$newid = false,$onedimensionkey = false) { $link = mysqli_connect(DB_SERVER,DB_USER,DB_PASS,DB_NAME); if (!$link) { print 'Error connecting to MySQL Server. Errorcode: ' . mysqli_connect_error(); exit; } // Prepare the query and split the parameters array into bound values if ($sql_stmt = mysqli_prepare($link,$query)) { if ($params) { $types = ''; $new_params = array(); $params_ref = array(); // Split the params array into types string and parameters sub-array foreach ($params as $param) { $types .= $param['type']; $new_params[] = $param['value']; } // Cycle the new parameters array to make it an array by reference foreach ($new_params as $key => $parameter) { $params_ref[] = &$new_params[$key]; } call_user_func_array('mysqli_stmt_bind_param',array_merge(array($sql_stmt,$types),$params_ref)); } } else { print 'Error: ' . mysqli_error($link); exit(); } // Execute the query mysqli_stmt_execute($sql_stmt); // If there are results to retrive,do so if ($rs) { $results = array(); $rows = array(); $row = array(); stmt_bind_assoc($sql_stmt,$results); while (mysqli_stmt_fetch($sql_stmt)) { foreach ($results as $key => $value) { $row[$key] = $value; } $rows[] = $row; } if ($onedimensionkey) { $i = 0; foreach ($rows as $row) { $simplearray[$i] = $row[$onedimensionkey]; $i++; } return $simplearray; } else { return $rows; } } // If there are no results but we need the new ID,return it elseif ($newid) { return mysqli_insert_id($link); } // Close objects mysqli_stmt_close($sql_stmt); mysqli_close($link); } 根据我发布的链接,有一个解决方法涉及完成任务的顺序,但要么我以完全不同的方式处理我的查询,要么我只是不理解重要的事情. 感谢任何能提供帮助的人! 编辑:感谢Corina的回答,我已经解决了这个问题 – 对于遇到此问题的任何其他人,您只需要在mysql_stmt_execute命令之后添加以下内容: // Execute the query mysqli_stmt_execute($sql_stmt); // Store results mysqli_stmt_store_result($sql_stmt);
我设法通过在绑定数据之前调用
mysqli_stmt_store_result来解决相同的问题.
有人遇到同样的问题并在php.net website上分享了答案:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |