首页 / PHP / 在MYSQL查询之前使用PHP变量
在MYSQL查询之前使用PHP变量
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在MYSQL查询之前使用PHP变量,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含10429字,纯文字阅读大概需要15分钟。
内容图文
![在MYSQL查询之前使用PHP变量](/upload/InfoBanner/zyjiaocheng/902/41b3b2c1668c456598be9a55e3794c41.jpg)
!!请向下滚动到“编辑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
}
当我回复$importsectie;时,我得到了Tekenen’,’Wiskunde,这很好.
当我回显$query1;时,我得到SELECT * FROM smoelenboek WHERE sectie1 IN(‘Tekenen’,’Wiskunde’)或sectie2 IN(‘Tekenen’,’Wiskunde’)或sectie3 IN(‘Tekenen’,’Wiskunde’)或sectie4 IN(‘Tekenen’,’Wiskunde’)或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;和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不会在代码中的任何其他位置使用.
编辑
我以不同的方式尝试了它:
$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
}
两个echo $query1;和echo $query2;再次给出相同的结果.
现在使用$query2工作正常(所以在$importsectie之前没有slach).
使用$query1将开始加载pdf,加载图片填满,然后显示“无法加载PDF文件”.
编辑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
}
}
两个echo $query1;和echo $query2;再次给出与之前相同的结果.现在他们都将开始加载pdf,但加载图片没有填满,页面保持“正在加载…”.在if语句中构建$query1时遇到了同样的问题.
编辑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();
?>
当我用’Tekenen’替换五个?并删除bind_param时,pdf被正确呈现.当我使用上面的代码时,它没有.该页面保持“正在加载…”.我在每个变量的代码中都使用了var_dump.在两种情况下我都得到相同的输出(工作和不工作).谁能帮忙???
编辑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"
*/
内容总结
以上是互联网集市为您收集整理的在MYSQL查询之前使用PHP变量全部内容,希望文章能够帮你解决在MYSQL查询之前使用PHP变量所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。