我正在尝试在运行while
循环时访问我的连接变量,但是当我尝试调用一个函数时,它在我身上出了问题,PHP在我尝试准备时给了我所谓的布尔错误我在函数中的陈述。
我调试它到我知道我的变量$CategorieId
被推上的时候,当我在函数本身中执行$con
时,我确实得到print_r
的数组返回。但是当我在准备语句时尝试访问它时,它只返回boolean
,从而在下拉列表中创建错误,无法填写它。
设置如下。
dbControl.php
$con = mysqli_connect('localhost','root','','jellysite') or die("Error " . mysqli_error($con));
function OpenConnection(){
global $con;
if (!$con){
die('Er kan geen verbinding met de server of met de database worden gemaakt!');
}
}
functionControl.php
function dropdownBlogtypeFilledin($con,$CategorieId){
echo "<select name='categorie' class='dropdown form-control'>";
$sql = "SELECT categorieId, categorieNaam
FROM categorie";
$stmt1 = mysqli_prepare($con, $sql);
mysqli_stmt_execute($stmt1);
mysqli_stmt_bind_result($stmt1,$categorieId,$categorieNaam);
while (mysqli_stmt_fetch($stmt1)){
echo "<option value='".$categorieId."'.";
if( $categorieId == $CategorieId){
echo "selected='selected'";
}
echo ">".$categorieNaam."</option>";
}
echo "</select>";
}
Blogedit.php
<?php
require_once '../db/dbControl.php';
require_once '../db/functionControl.php';
session_start();
OpenConnection();
$id = $_SESSION['user'];
?>
// some html up to the while loop
<?php
$a = $_GET['a'];
$sql = "SELECT blog.blogId,
blog.blogTitel,
blog.blogCategorieId,
blog.blogSynopsis,
blog.blogInhoud
FROM blog
WHERE blog.blogId = ? ";
$stmt1 = mysqli_prepare($con, $sql);
mysqli_stmt_bind_param($stmt1,'i',$a);
mysqli_stmt_execute($stmt1);
mysqli_stmt_bind_result($stmt1, $blogId, $Titel, $CategorieId, $Synopsis, $Inhoud );
while (mysqli_stmt_fetch($stmt1)){
$Synopsis = str_replace('\r\n','', $Synopsis);
$Inhoud = str_replace('\r\n','', $Inhoud);
?>
// again some HTML
<?php dropdownBlogtypeFilledIn($con,$CategorieId); ?>
// guess what, more html!
<?php
}
?>
有谁知道我怎么解决它?我用全局变量(OpenConnection()
函数)尝试了它,但它似乎不起作用。
修改
我确认它确实与$ con变量有关。我通过在函数中再次定义$ con变量来测试它,它完美地打印了我想要的东西。它的解决方案很糟糕。我只是喜欢定义一次。
奇怪的是,只有当我把它放在while循环中时它才会发生。我有一个完全相同的创建表单,除了没有while循环,因为我从头开始创建它并且该部分没有涉及PHP。我也有一个下拉函数,它也需要$con
变量,但它有效。我真的认为它与while循环有关。
答案 0 :(得分:0)
我现在通过在启动检索信息的页面的预准备语句之前创建连接变量的新实例来解决它。
<?php
$connection = $con;
$a = $_GET['a'];
$sql = "SELECT blog.blogId,
blog.blogTitel,
blog.blogCategorieId,
blog.blogSynopsis,
blog.blogInhoud
FROM blog
WHERE blog.blogId = ? ";
mysqli_stmt_init($con);
$stmt1 = mysqli_prepare($con, $sql);
mysqli_stmt_bind_param($stmt1,'i',$a);
mysqli_stmt_execute($stmt1);
mysqli_stmt_bind_result($stmt1, $blogId, $Titel, $CategorieId, $Synopsis, $Inhoud );
mysqli_stmt_store_result($stmt1);
while (mysqli_stmt_fetch($stmt1)){
$Synopsis = str_replace('\r\n','', $Synopsis);
$Inhoud = str_replace('\r\n','', $Inhoud);
<?php dropdownBlogtypeFilledIn($connection ,$CategorieId); ?>
?>
使用变量$connection
,我可以在while调用中启动需要连接详细信息的函数。我不确定这里是否有更清晰的选项,但实际上我在某处读到如果我已经在准备好的语句中使用它,我就无法使用相同的连接变量。显然我不能骑这个连接变量,这似乎是问题所在。我将调查这一点,并希望每当我有多个下拉列表时,我都不必编写一堆连接变量,例如从数据库中提取信息。