PHP MySQLi使用foreach获取行
我创建了这个函数,用于从mysqli数据库获取数据行 我试着用foreach,但我得到的唯一的东西是我附加的图片请查看 对不起,我不能发布图片,这需要我10%的声誉 下: 是的,这是我得到的12 x M n O x 下面是我用表单和php编写的代码PHP MySQLi使用foreach获取行,php,mysql,foreach,mysqli,Php,Mysql,Foreach,Mysqli,我创建了这个函数,用于从mysqli数据库获取数据行 我试着用foreach,但我得到的唯一的东西是我附加的图片请查看 对不起,我不能发布图片,这需要我10%的声誉 下: 是的,这是我得到的12 x M n O x 下面是我用表单和php编写的代码 ## FOR SHORTHAND DATABASE if ( !function_exists( 'hs_debugSQL' ) ) { function hs_debugSQL($hs_db, $string, $debug=0) {
## FOR SHORTHAND DATABASE
if ( !function_exists( 'hs_debugSQL' ) ) {
function hs_debugSQL($hs_db, $string, $debug=0) {
if ($debug == 1)
print $string;
if ($debug == 2)
error_log($string);
$result = mysqli_query($hs_db, $string);
if ($result == false) {
error_log("SQL error: ".mysqli_error($hs_db)."\n\nOriginal query: $string\n");
// Remove following line from production servers
die("SQL error: ".mysqli_error($hs_db)."\b<br>\n<br>Original query: $string \n<br>\n<br>");
}
return $result;
}
}
## FOR SELECT SQL
if ( !function_exists( 'hs_getrows' ) ) {
function hs_getrows($sql, $debug=0) {
$result = hs_debugSQL($sql, $debug);
if($lst = mysqli_fetch_array($result)) {
mysqli_free_result($result);
return $lst;
}
mysqli_free_result($result);
return false;
}
}
形式
从mysqli的连接很好,正如您所看到的,我可以从mysqli获取数据。
但当我使用foreach检索数据时,它只显示1个数字,有时显示1个字符
我喜欢了解我的foreach代码有什么问题
谢谢。解释
问题在于:
if($lst = mysqli_fetch_array($result)) {
mysqli_free_result($result);
return $lst;
}
mysqli_fetch_数组逐行返回,您应该循环遍历结果并返回数组。像这样的
$lst = array();
while ($lst = mysqli_fetch_array($result)){
$lst[] = $row;
}
mysqli_free_result($result);
return $lst;
编辑:
嗯,我看到了另一件额外的事情
hs_debugSQL($sql, $debug);
在形式上
hs_getrows( $hs_db,....)
您正在使用您想要执行的SQL调用函数hs_debugSQL,我猜,但是在您的函数中,第一个参数是数据库链接,第二个参数是您想要执行的SQL。您应该将其更改为与函数的参数相匹配
在第一个参数中使用数据库链接调用函数hs_getrows,在函数声明中使用$sql,因此应该对此进行更改。我忍不住认为这些“helper”函数使事情变得更加复杂。这里有不止一个问题,但这里有一个关键问题: 此功能:
function hs_debugSQL($hs_db, $string, $debug=0) {
需要传入$hs_db(一种数据数据库连接资源),而此代码:
function hs_getrows($sql, $debug=0) {
$result = hs_debugSQL($sql, $debug); // where is $hs_db?
if($lst = mysqli_fetch_array($result)) {
mysqli_free_result($result);
return $lst;
}
mysqli_free_result($result);
return false;
未能提供一个关键参数。当然,在调用序列的后面,我们发现$hs_db已经提交,但现在被称为$sql,并且查询似乎丢失了
简化!摆脱这些无用的功能,澄清你正在尝试做什么,并使某些东西起作用。然后,如果您觉得有必要再次封装其中的一些内容,那么请在知道代码基本正常工作的情况下继续这样做。如果您想使用
正如在另一个答案中指出的那样,整个方法非常糟糕。因此,让它再次发布,随时可用——显然是对OP的伤害
function hs_getrows($sql, $debug=0) {
$result = hs_debugSQL($sql, $debug); // where is $hs_db?
if($lst = mysqli_fetch_array($result)) {
mysqli_free_result($result);
return $lst;
}
mysqli_free_result($result);
return false;
<?php
$sql = "SELECT user_login FROM hs_users WHERE user_control = 'admin'";
$admin_list = $hs_db->getCol($sql);
?>
<label for="message_title">Send to Admin <span class="red">*</span></label>
<input id="name" name="user_to" class="text" />
<select name="user_to">
<?php foreach ($admin_list as $admin): ?>
<option value="<?=$admin?>"><?=$admin?></option>
<?php endforeach ?>
</select>