mysqli在php中为查询提供0结果,但在终端中提供正确的结果
我有两张表和这两张表的关联表。我试图运行一个查询,从终端运行代码时会得到我想要的结果,但如果从php执行,则会得到零或未知的列结果 这是我的疑问:mysqli在php中为查询提供0结果,但在终端中提供正确的结果,php,mysql,Php,Mysql,我有两张表和这两张表的关联表。我试图运行一个查询,从终端运行代码时会得到我想要的结果,但如果从php执行,则会得到零或未知的列结果 这是我的疑问: $result = $mysqli->query("SELECT * FROM projects p JOIN projects_groups pg on p.projectid = pg.projectid JOIN groups g on g.groupid = pg.groupid WHERE p.projectid = 'best
$result = $mysqli->query("SELECT * FROM projects p
JOIN projects_groups pg on p.projectid = pg.projectid
JOIN groups g on g.groupid = pg.groupid
WHERE p.projectid = 'bestproject'");
完全按照上面的方式运行代码会返回0结果。如果我用一个变量切换“bestproject”,它会返回一个未知的列bestproject错误
我的问题出了什么问题
更新:我收到结果的函数中有一个愚蠢的错误,这导致了我的困惑。当查询成功时,receiver函数显示空数组;当查询错误时,处理查询的函数也显示空或失败的结果(不是上面的结果)。我一直在搜索查询中的错误,而不是查看其他地方。很抱歉浪费了您的时间。您在那里所做的一切都是选中了哪些表和内容。您还需要一个php函数来写出内容 例如:
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
$sql=“从MyGuests中选择id、firstname、lastname”;
$result=$conn->query($sql);
如果($result->num_rows>0){
//每行的输出数据
而($row=$result->fetch_assoc()){
echo“id:.$row[“id”]。-Name:.$row[“firstname”]。$row[“lastname”]。
”;
}
}否则{
回显“0结果”;
}
正如您所看到的,echo也会写出表的内容。您还可以使不必使用$row['id'],只需将其保存在另一个变量中:
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$id = $row['id'];
$first = $row['firstname'];
$last = $row['last'];
echo "id: $id - Name: $first $last<br>";
}
} else {
echo "0 results";
}
$sql=“从MyGuests中选择id、firstname、lastname”;
$result=$conn->query($sql);
如果($result->num_rows>0){
//每行的输出数据
而($row=$result->fetch_assoc()){
$id=$row['id'];
$first=$row['firstname'];
$last=$row['last'];
echo“id:$id-Name:$first$last
”;
}
}否则{
回显“0结果”;
}
当然,您需要在表格中包含一些内容您在表格中所做的一切都是选定的表格和内容。您还需要一个php函数来写出内容 例如:
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
$sql=“从MyGuests中选择id、firstname、lastname”;
$result=$conn->query($sql);
如果($result->num_rows>0){
//每行的输出数据
而($row=$result->fetch_assoc()){
echo“id:.$row[“id”]。-Name:.$row[“firstname”]。$row[“lastname”]。
”;
}
}否则{
回显“0结果”;
}
正如您所看到的,echo也会写出表的内容。您还可以使不必使用$row['id'],只需将其保存在另一个变量中:
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$id = $row['id'];
$first = $row['firstname'];
$last = $row['last'];
echo "id: $id - Name: $first $last<br>";
}
} else {
echo "0 results";
}
$sql=“从MyGuests中选择id、firstname、lastname”;
$result=$conn->query($sql);
如果($result->num_rows>0){
//每行的输出数据
而($row=$result->fetch_assoc()){
$id=$row['id'];
$first=$row['firstname'];
$last=$row['last'];
echo“id:$id-Name:$first$last
”;
}
}否则{
回显“0结果”;
}
当然,您需要在表中包含一些内容第一个问题对我来说没有意义。导致未知列错误的原因是您没有使用单引号,因此MySQL将尝试查找具有您的变量名称的列,而不是将其作为值处理
$result = $mysqli->query("SELECT * FROM projects p
JOIN projects_groups pg on p.projectid = pg.projectid
JOIN groups g on g.groupid = pg.groupid
WHERE p.projectid = '".$argument."'");
为了避免SQL注入,最好使用PDO传递参数 第一个问题对我来说没有意义。导致未知列错误的原因是您没有使用单引号,因此MySQL将尝试查找具有您的变量名称的列,而不是将其作为值处理
$result = $mysqli->query("SELECT * FROM projects p
JOIN projects_groups pg on p.projectid = pg.projectid
JOIN groups g on g.groupid = pg.groupid
WHERE p.projectid = '".$argument."'");
为了避免SQL注入,最好使用PDO传递参数 谢谢你的回答,你帮我找了其他地方 事实是我在别的地方犯了一个错误。我正在将结果加载到数组中,而我只想得到一个结果,而接收结果的函数实际上是试图从不同的变量中获取数据 这有点尴尬,但我花了几个小时才弄明白,所以我不得不问
对不起,谢谢你的帮助 谢谢你的回答,你帮我找了其他地方 事实是我在别的地方犯了一个错误。我正在将结果加载到数组中,而我只想得到一个结果,而接收结果的函数实际上是试图从不同的变量中获取数据 这有点尴尬,但我花了几个小时才弄明白,所以我不得不问
对不起,谢谢你的帮助 你能再解释一下“上面给出的结果是0”吗。你是说结果上的num_行吗?是的num_行是0,但这是不可能的。我手动记录只是为了测试它,它在终端中工作。它实际上可能返回正确
num_rows
并不是绝对可靠的。从文档:mysqli_num_rows()的行为取决于使用的是缓冲还是非缓冲结果集。对于未缓冲的结果集,在检索结果中的所有行之前,mysqli_num_rows()不会返回正确的行数。
在查询中找不到任何错误。我认为您应该尝试通过将此查询放入变量中并在if语句中进行查询(如手册中所述),查看mysql是否返回任何错误(由于格式问题):您可能需要store\u result()
将结果缓冲到内存中。你能再解释一下“上面给出的结果是0”吗。你是说结果上的num_行吗?是的num_行是0,但这是不可能的。我手动记录只是为了测试它,它在终端中工作。它实际上可能返回正确num_rows
并不是绝对可靠的。从文档:mysqli_num_rows()的行为取决于使用的是缓冲还是非缓冲结果集。对于未缓冲的结果集,mysqli_num_rows()将不会返回正确的n