在 MYSQL 查询之前使用 PHP 变量

2024-01-10

!!请向下滚动到“编辑4”!!

这让我彻底发疯了!

我有以下代码,但它不起作用:

$importsectie = join("','",$importsectie);

$query1 = "SELECT * FROM smoelenboek WHERE sectie1 IN ('$importsectie') OR sectie2 IN ('$importsectie') OR sectie3 IN ('$importsectie') OR sectie4 IN ('$importsectie') OR sectie5 IN ('$importsectie') AND actief='ja' ORDER BY achternaam ASC";

$result1 = mysql_query($query1) or die(mysql_error());
while($row1 = mysql_fetch_array($result1)){

here the stuff I want to do with the results

}

When I echo $importsectie;, I get Tekenen','Wiskunde这很好。

When I echo $query1;, I get SELECT * FROM smoelenboek WHERE sectie1 IN ('Tekenen','Wiskunde') OR sectie2 IN ('Tekenen','Wiskunde') OR sectie3 IN ('Tekenen','Wiskunde') OR sectie4 IN ('Tekenen','Wiskunde') OR sectie5 IN ('Tekenen','Wiskunde') AND actief='ja' ORDER BY achternaam ASC我在 PhpMyAdmin 中尝试过,它给了我想要的记录,所以这也很好。

我怀疑这与$importsectie所以我尝试了一下,没有:

$importsectie = join("','",$importsectie);

$query1 = "SELECT * FROM smoelenboek WHERE sectie1 IN ('$importsectie') OR sectie2 IN ('$importsectie') OR sectie3 IN ('$importsectie') OR sectie4 IN ('$importsectie') OR sectie5 IN ('$importsectie') AND actief='ja' ORDER BY achternaam ASC";

$query2 = "SELECT * FROM smoelenboek WHERE sectie1 IN ('Tekenen','Wiskunde') OR sectie2 IN ('Tekenen','Wiskunde') OR sectie3 IN ('Tekenen','Wiskunde') OR sectie4 IN ('Tekenen','Wiskunde') OR sectie5 IN ('Tekenen','Wiskunde') AND actief='ja' ORDER BY achternaam ASC";

$result1 = mysql_query($query2) or die(mysql_error());
while($row1 = mysql_fetch_array($result1)){

here the stuff I want to do with the results

}

echo $query1; and echo $query2;现在给出完全相同的结果(与上面的结果相同),但脚本仍然不起作用。

现在这是奇怪的事情:当我不小心在前面放了一些斜杠时$importsectie,突然就起作用了!!

//$importsectie = join("','",$importsectie);

$query1 = "SELECT * FROM smoelenboek WHERE sectie1 IN ('$importsectie') OR sectie2 IN ('$importsectie') OR sectie3 IN ('$importsectie') OR sectie4 IN ('$importsectie') OR sectie5 IN ('$importsectie') AND actief='ja' ORDER BY achternaam ASC";

$query2 = "SELECT * FROM smoelenboek WHERE sectie1 IN ('Tekenen','Wiskunde') OR sectie2 IN ('Tekenen','Wiskunde') OR sectie3 IN ('Tekenen','Wiskunde') OR sectie4 IN ('Tekenen','Wiskunde') OR sectie5 IN ('Tekenen','Wiskunde') AND actief='ja' ORDER BY achternaam ASC";

$result1 = mysql_query($query2) or die(mysql_error());
while($row1 = mysql_fetch_array($result1)){

here the stuff I want to do with the results

}

为什么?!?我真的想使用这些信息$importsectie。 我想要用它做的事情是用 FPDF 制作一个 pdf 文件。$importsectie代码中的其他任何地方都没有使用。

Edit

我以不同的方式尝试过:

 $importsectie = $importsectie[0];

 $query1 = "SELECT * FROM smoelenboek WHERE sectie1='$importsectie' OR sectie2='$importsectie' OR sectie3='$importsectie' OR sectie4='$importsectie' OR sectie5='$importsectie' AND actief='ja' ORDER BY achternaam ASC";

 $query2 = "SELECT * FROM smoelenboek WHERE sectie1='Tekenen' OR sectie2='Tekenen' OR sectie3='Tekenen' OR sectie4='Tekenen' OR sectie5='Tekenen' AND actief='ja' ORDER BY achternaam ASC";

 $result1 = mysql_query($query1) or die(mysql_error());
 while($row1 = mysql_fetch_array($result1)){

 here the stuff I want to do with the results

 }

Both echo $query1; and echo $query2;再次给出相同的结果。 现在使用$query2工作正常(所以之前没有斜线$importsectie)。 使用$query1将开始加载 pdf,加载图片填满,然后显示“无法加载 PDF 文件”。

Edit 2

 $aantalsecties = count($importsectie);
 for($i=0;$i<=$aantalsecties-1;$i++){

     $importsectiedeel = $importsectie[$i];

     $query1 = "SELECT * FROM smoelenboek WHERE sectie1='$importsectiedeel' OR sectie2='$importsectiedeel' OR sectie3='$importsectiedeel' OR sectie4='$importsectiedeel' OR sectie5='$importsectiedeel' AND actief='ja' ORDER BY achternaam ASC";

     $query2 = "SELECT * FROM bonasmoelenboek WHERE sectie1='Tekenen' OR sectie2='Tekenen' OR sectie3='Tekenen' OR sectie4='Tekenen' OR sectie5='Tekenen' AND actief='ja' ORDER BY achternaam ASC";

     $result1 = mysql_query($query1) or die(mysql_error());
     while($row1 = mysql_fetch_array($result1)){

         here the stuff I want to do with the results

     }
 }

Both echo $query1; and echo $query2;再次给出与之前相同的结果。现在两者都将开始加载pdf,但是加载图片没有填满,页面一直显示“正在加载...”。我遇到过同样的问题$query1是在 if 语句内构建的。

Edit 3

因此,我多次按照建议切换到 mysqli 与准备好的语句相结合。由于我仍然遇到同样的问题,所以我现在发布整个代码。

首先我有一个带有复选框的页面:

<form action="pdfrender.php" method="POST">
    <input type="checkbox" name="sectie[]" value="Tekenen">Tekenen<br>
    <input type="checkbox" name="sectie[]" value="Wiskunde">Wiskunde<br>
    <input type="submit" value="Sectiesmoelenboek">
</form>

pdfrender.php 如下:

<?php

//Informatie binnenhalen
$importsectie = $_POST['sectie']; 

//Starten met het PDF-maak-script
require('../fpdf/fpdf.php');
class PDF extends FPDF
{
    //Koptekst
    function Header()
    {
        // Logo en een stukje leeg daaronder
        $this->Image('burggravenlaanheader.jpg',0,0,210);
        $this->Ln(20);
    }

    //Voettekst
    function Footer()
    {
        //1.5 cm boven de paginarand
        $this->SetY(-15);
        $this->SetFont('Arial','I',8);
        //Een hokje van paginabreed, 1 cm hoog, daarin pagina/totaal, geen rand, centreren
        $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
    }

}


//PDF aanmaken, pagina's laten tellen, nieuwe pagina beginnen
$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->AddPage();


//Teller nodig om foto's links en rechts op de pagina te plaatsen
$teller = 1;


//This is going to be dynamic later, with a for-loop scrolling through the parts of the array
$importsectiedeel = $importsectie[1];


//Informatie uit database halen
include '../dbconi.inc';


//Prepare en bind
$query1 ="SELECT * FROM smoelenboek WHERE sectie1=? OR sectie2=? OR sectie3=? OR sectie4=? OR sectie5=? AND actief='ja' ORDER BY achternaam ASC";
$stmt = $con->stmt_init();
if(!$stmt->prepare($query1)){

    print "Failed to prepare statement\n";

}else{

    $stmt->bind_param("sssss",$importsectiedeel,$importsectiedeel,$importsectiedeel,$importsectiedeel,$importsectiedeel);
    $stmt->execute();
    $result1 = $stmt->get_result();
    while ($row1 = $result1->fetch_assoc()) {

        //Alle parameters klaarmaken voor printen
        $afkorting = $row1['afkorting'];
        $voorletters = $row1['voorletters'];  
        $voornaam = $row1['voornaam'];
        $tussenvoegsel = $row1['tussenvoegsel'];
        $achternaam = $row1['achternaam'];
        $sectie1 = $row1['sectie1'];
        $sectie2 = $row1['sectie2'];
        $sectie3 = $row1['sectie3'];
        $sectie4 = $row1['sectie4'];
        $taak1 = $row1['taak1'];
        $taak1 = str_replace("?","",$taak1);
        $taak2 = $row1['taak2'];
        $taak2 = str_replace("?","",$taak2);
        $taak3 = $row1['taak3'];
        $taak3 = str_replace("?","",$taak3);
        $taak4 = $row1['taak4'];
        $taak4 = str_replace("?","",$taak4);
        $taak5 = $row1['taak5'];
        $taak5 = str_replace("?","",$taak5);

         //Alle secties en taken onder elkaar zetten
        $onderelkaar = $sectie1."\n".$sectie2."\n".$sectie3."\n".$sectie4."\n".$taak1."\n".$taak2."\n".$taak3."\n".$taak4."\n".$taak5;

        //Zorgen dat minder dan 4 secties en minder dan 5 taken geen extra witregels oplevert
        $onderelkaar = str_replace("\n\n","\n",$onderelkaar);
        $onderelkaar = str_replace("\n\n","\n",$onderelkaar);
        $onderelkaar = str_replace("\n\n","\n",$onderelkaar);
        $onderelkaar = str_replace("\n\n","\n",$onderelkaar);

        //Fotolink klaarzetten indien aanwezig, anders geenfoto.jpg klaarzetten
        if (file_exists('fotos/'.$afkorting.'.jpg')){

            $foto = 'fotos/'.$afkorting.'.jpg';

        }else{

            $foto = 'fotos/geenfoto.jpg';

        }

        //Afkorting hoofdletters voor het afdrukken (was klein voor het aanroepen van de jpg)
        $afkorting = strtoupper($afkorting);

        //Naam en afkorting koppelen
        $titel = $voorletters.' ('.$voornaam.') '.$tussenvoegsel.' '.$achternaam.' ('.$afkorting.')';

        //Extra spaties verwijderen bij mensen zonder tussenvoegsel
        $titel = str_replace("  "," ",$titel);

        //Als de teller oneven is, persoon links plaatsen
        if($teller%2!=0){

            $pdf->SetFont('Arial','',12);
            $pdf->Cell(95,7,$titel,0,1);
            $y = $pdf->GetY();
            $x = $pdf->GetX();
            $pdf->SetFont('Arial','',10);
            $pdf->Cell(30,45,$pdf->Image($foto,$pdf->GetX(),$pdf->GetY(),30),1,0);
            $pdf->MultiCell(65,5,$onderelkaar,0);

        //Als de teller even is, de persoon rechts plaatsen    
        }else{

            $pdf->SetY($y-7);
            $pdf->SetX($x+95);
            $pdf->SetFont('Arial','',12);
            $pdf->Cell(95,7,$titel,0,0);
            $pdf->SetY($y);
            $pdf->SetX($x+95);
            $pdf->Cell(30,45,$pdf->Image($foto,$pdf->GetX(),$pdf->GetY(),30),1,0);
            $pdf->SetY($y);
            $pdf->SetX($x+125);
            $pdf->SetFont('Arial','',10);
            $pdf->MultiCell(65,5,$onderelkaar,0);
            $pdf->SetY($y+45);
            $pdf->SetX(10);
            $pdf->Cell(0,9,'',0,2);

        }

        //Teller laten oplopen
        $teller = $teller+1;    

    //Afsluiten van de while-loop
    }

//Afsluiten van de else
}

//Als de laatste persoon links geplaatst is, cursor naar beneden zetten (ipv ernaast)
if($teller%2==0){

    $pdf->SetY($y+45);
    $pdf->SetX(10);
    $pdf->Cell(0,9,'',0,2);

}

//PDF daadwerkelijk aanmaken
$pdf->Output();

//Statement en databaseconnectie sluiten
$stmt->close();
$con->close();

?>

当我更换五个?'s with 'Tekenen'并删除bind_param,pdf 已正确呈现。当我使用上面的代码时,它没有。页面一直显示“正在加载...”。我用了var_dump整个代码中的每个变量。在这两种情况下我得到相同的输出(工作和不工作)。有人可以帮忙吗???

Edit 4

我将其范围缩小到以下行(在代码中出现两次。):

$pdf->Cell(30,45,$pdf->Image($foto,$pdf->GetX(),$pdf->GetY(),30),1,0);

更具体地说,这有效:

echo '<img src="fotos/geenfoto.jpg" width=100>';

这不会:

$pdf->Image("fotos/geenfoto.jpg",0,0,30);

如前所述,它确实可以在 de MySql(i) 查询中不使用变量的情况下工作,这可能是什么问题?


除了不使用 mysql_* 函数的普遍建议之外,
您需要确保数组元素中没有任何空格。

下面是一些用于在每个步骤中删除和调试查询的示例代码。

<?php

$elements = array('  element A', "\t Element B \r\n");

var_dump($elements);

/*
use var_dump to check your array elements for whitespace and such
array(2) {
  [0]=>
  string(11) "  element A"
  [1]=>
  string(14) "   Element B
"
}
*/

// create your IN clause string and verify it
$joinedString = "('" . join("','",array_map('trim',$elements)) . "')";

var_dump($joinedString);
/*
use var_dump not echo
string(25) "('element A','Element B')"

*/

// your query string finally becomes
$query = "SELECT * FROM smoelenboek 
WHERE sectie1 IN $joinedString 
OR sectie2 IN $joinedString 
OR sectie3 IN $joinedString 
OR sectie4 IN $joinedString 
OR sectie5 IN $joinedString 
AND actief='ja' ORDER BY achternaam ASC";

// and check it with var_dump and also run it in PhpMyAdmin
var_dump($query);
/*
string(280) "SELECT * FROM smoelenboek
WHERE sectie1 IN ('element A','Element B')
OR sectie2 IN ('element A','Element B')
OR sectie3 IN ('element A','Element B')
OR sectie4 IN ('element A','Element B')
OR sectie5 IN ('element A','Element B')
AND actief='ja' ORDER BY achternaam ASC"
*/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 MYSQL 查询之前使用 PHP 变量 的相关文章

  • TCPDF / FPDI 可以接受 PDF 作为字符串吗?

    是否可以将 TCPDF 或 FPDI PDF 作为字符串提供 我有一个传入的 PDF 数组作为字符串 但无法写入磁盘 我在文档中找不到与此相关的任何内容 如果没有 是否有一种有效的方法来从内存或作为对象存储 读取这些 PDF 将它们喂给 F
  • 从目录中读取所有文件内容 - php

    这实际上是一个简单的任务 我想显示指定文件夹中所有文件的内容 我正在传递目录名称 echo a href row qname a 在第二页上 我正在迭代目录内容 while entryname readdir myDirectory if
  • 打印一个模式以显示最多 5 行 5 列的数字,例如 5 4 3 2 1 和下一行 4 3 2 1 5 直到第 5 行

    这是一个正方形图案 每行有 5 列 共有 5 行 图案如下所示 5 4 3 2 1 4 3 2 1 5 3 2 1 5 4 2 1 5 4 3 1 5 4 3 2 我的代码如下以获得模式 但当计数器达到 1 并显示在相应的列值中时 我无法重
  • 为什么 SORT_REGULAR 在 PHP 中产生不一致的结果?

    我正在开发一个类 它使 PHP 中的数组排序变得更容易 并且我一直在使用 SORT 常量 但是行为或SORT REGULAR 默认排序类型 似乎有所不同 具体取决于您在数组中添加项目的顺序 此外 我找不到任何模式来解释为什么会出现这种情况
  • $_REQUEST、$_GET、$_POST 哪一个最快?

    这些代码中哪一个会更快 temp REQUEST s or if isset GET s temp GET s else temp POST s REQUEST http php net manual en reserved variabl
  • 复杂的sql树行

    表结构 id message reply id 1 help me 0 434 love to 1 852 didn t work 434 0110 try this 852 2200 this wont 0 5465 done 0110
  • 删除、截断或删除以清理 MySQL 中的表

    我正在尝试清理表格 但没有摆脱表格的实际结构 我有一个id自动递增的列 我不需要保留ID号 但我确实需要它来保持其自动递增的特性 我发现了删除和截断 但我担心其中之一会完全删除整个表 从而使未来的插入命令变得无用 如何从表中删除所有记录以便
  • 为什么使用闭包进行赋值而不是直接将值赋给键?

    我当时正在看在 7 10 他添加了一个数据库依赖项并使用闭包来分配值 我的问题是为什么不直接使用直接赋值 我的意思是不这样做 container db capsule 相当于这样做 container db function contain
  • 如何在 PHP 中运行 shell 脚本?

    我正在尝试使用 PHP 触发 shell 脚本的运行 本质上 当用户在我们用 PHP 编写的网站上完成一个操作时 我们希望触发一个 shell 脚本 该脚本本身调用一个 Java 文件 提前致谢 See shell exec http ph
  • 同一路由组的多个前缀

    我正在为一所学校编写一个相当简单的网站 该网站有新闻 文章 视频剪辑 等 它的工作方式是在主页中我们向访问者展示一些课程 例如 gt math gt geography gt chemistry 用户在其中选择 1 网站内容会根据用户的选择
  • 维护 HttpUrlConnection 调用之间的会话(Native/Webview)

    让我从我做的开始desire 我想制作一个应用程序part native and part webviews Problem 维护本机和 webview 部分之间的会话 My 处理方法 this 我打算实现一个本机登录 其中我向用户展示两个
  • Laravel 类邮件程序不存在

    我将应用程序从 5 更新到 5 2 现在 当我调用 Mail send 时 它会返回一个异常 Class mailer 不存在 Mail send emails mail data gt content function m use to
  • 如何在 WordPress/WooCommerce 3+ 中向评论表单添加自定义字段

    我正在尝试在产品评论中添加 电话 字段 WooCommerce 3 针对未注册用户 来宾 电话号码只能由管理员在管理面板中看到 电话字段需要填写 Required 我尝试了这段代码 但这不起作用 function true phone nu
  • 扫描 PHP 上传的病毒

    我目前正在使用以下代码来扫描作为申请表的一部分上传的文件 safe path escapeshellarg dir file command usr bin clamscan stdout safe path out int 1 exec
  • PHP函数返回值到html标签

    我想获取函数的返回值并将其显示到特定的id 在我的 Class php 中 我有一个名为 login 的函数 用于验证密码是否正确 不正确
  • 如何检查一个值是否已经存在以避免重复?

    我有一个 URL 表 但我不想要任何重复的 URL 如何使用 PHP MySQL 检查给定 URL 是否已在表中 如果您不想重复 可以执行以下操作 添加唯一性约束 use REPLACE http dev mysql com doc ref
  • ODBC 链接表中突然开始出现写入冲突消息

    我有一个 mySQL 数据库 用于跟踪我们的项目并驱动我们的网站显示其信息 为了方便更新数据库 我设置了一个使用 ODBC 连接 MySQL ODBC 5 1 来编辑数据的访问数据库 过去几个月一直运行良好 没有出现任何问题 然而 昨晚用户
  • 通过复选框选择多行时出错错误未定义索引:复选框

    我想从中选择多行checkbox并想通过单击按钮立即更新它们 我尝试了多种方法 但不起作用 你能帮忙吗 它显示错误为Undefined index checkbox td td
  • 表单提交后显示 $_FILES['image']

    提交表单后如何显示上传的图片 提交表单后 它将是一个预览页面 因此我不会在 MySQLet 中存储图像类型 BLOB 如何显示 FILES image
  • 如何更改phpmyadmin MySQL的IP地址?

    我在 xampp 中更改了 apache 的 IP 地址 但无法连接到 MySQL 我认为问题是我的 apache 不在我的数据库的同一网络上 我的 apache 位于 192 168 1 10 而我的 MySQL 位于 127 0 0 1

随机推荐