php获取longtext字段为空,php – 在longtext字段上准备好的mysqli select语句将返回空...
我有一個運行良好的數據庫查詢功能 – 除了我遇到了
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);
總結
以上是生活随笔為你收集整理的php获取longtext字段为空,php – 在longtext字段上准备好的mysqli select语句将返回空...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用php实现一个简易的web表单生成器,
- 下一篇: java怎么不安装到c盘的教程,帮您设置