PHP查询无法使用变量

Div*_*iya 4 php mysql

在我的页面中,我有这个带有echo的代码.

<?php

include("../config.php");

$q = mysql_query("SELECT propertyaddress FROM propertydetail WHERE active='yes' and leasedatefrom='".date("m-d-Y", strtotime('+1 months'))."'");
$res = mysql_fetch_array($q);
echo "<br/>pdetail=".$pdetail=trim($res['propertyaddress']);
echo $query="SELECT * FROM tenantmaster WHERE propertyaddress like '".$pdetail."'";
//echo $query="SELECT * FROM tenantmaster ";
//echo $query="SELECT * FROM tenantmaster WHERE propertyaddress = '1934 Heron Ave Unit D Schaumburg IL 60193'";

$resultdb = mysql_query($query);
if (!$resultdb) {
    die('Invalid query: ' . mysql_error());
}
else{
    echo "<br/>right query";
}

echo "<br/>num of row===".mysql_num_rows($resultdb);
$rowt = mysql_fetch_array($resultdb);
echo "<br/>row===".$rowt['name'];
exit;

?>
Run Code Online (Sandbox Code Playgroud)

config.php文件

<?php

$mysql_hostname = "localhost";
$mysql_user = "root";
$mysql_password = "";
$mysql_database = "gms_estate";

/*
$mysql_hostname = "localhost";
$mysql_user = "root";
$mysql_password = "";
$mysql_database = "gms_estate";
*/

$bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password) 
or die("Opps some thing went wrong");
mysql_select_db($mysql_database, $bd) or die("Opps some thing went wrong");

?>
Run Code Online (Sandbox Code Playgroud)

问题是我的第一个查询$q正在工作,但查询$query也工作,但是mysql_num_rows($resultdb)不工作并显示0行但是,当我运行echo查询到数据库时,它显示1行.为什么?

我试过$res['propertyaddress']变量trim()但没有成功.

但是当我使用1934 Heron Ave Unit D Schaumburg IL 60193(那是我的变量值)而不是$res['propertyaddress']那时它正在工作.

所以,当我直接赋予变量值时,它就可以正常工作,但是当我给变量而不是.为什么?

Rob*_*bie 6

比较来自多行字段的文本条目的一个常见问题是,您可能在第一个查询的结果中有"换行符"或"制表符",但这不在第二个查询中.(其他陷阱是"不间断的空间").

当您在HTML中回显时,您将看不到输出中的那些(因此复制和粘贴工作),但它们将在查询中使用(因此直接输入失败).尝试"查看源代码"(显示换行符)或在命令行中运行,因为这可能会为您提供更多线索.

现在,使用除去字母数字和空格以外的任何内容 preg_replace

$pdetail = trim( preg_replace("/[^0-9a-zA-Z ]/", "", $res['propertyaddress']) );
Run Code Online (Sandbox Code Playgroud)

最终你会想要调整它以涵盖你的所有用例,或者你发现它是一个"换行符"只是删除那些 - 但你需要找到不同的东西.


并且,根据评论:检查mysqli/PDO参数化查询.如果原始地址包含单引号,那么也会失败(结果未知).这是一个痛苦的第一次,但它会在以后拯救你很多,使你的代码更容易阅读,并在这里得到更多的帮助(因为你的代码更容易阅读).

http://php.net/manual/en/pdo.prepared-statements.php

  • "在SO上获得更多帮助"应该可以阅读"在SO上获取更少的***!" (2认同)