我不明白程序是如何工作的,即使我搜索了几个主题/教程但只找到了无意义的例子。
在PHP中,我的代码看起来像这样:
function getFullPathFromID($ID)
{
$path = '';
while($result = $c->query("SELECT IDParentFolder,path FROM folders WHERE ID=$ID")->fetch())
{
$ID = $result->IDParentFolder;
$path = $result->path.'/'.$path;
}
return $path;
}
我无法使用程序,我甚至无法查询db:
DELIMITER #
CREATE PROCEDURE getFullPathFromID(ID INT)
BEGIN
SELECT path FROM folders WHERE ID = ID;
END
#
当我用有效值执行它时,我仍然得到“MySQL返回一个空结果集(即零行)。”
那么如何执行在循环中检索数据然后返回自定义值的查询(每个步骤的值的串联)?
由于
答案 0 :(得分:1)
存储过程中存在问题,因为标量id
与表中的列具有相同的名称。所以,表达式:
where id = id
没有达到你的预期。
你应该把它写成:
DELIMITER #
CREATE PROCEDURE getFullPathFromID(v_ID INT)
BEGIN
SELECT path FROM folders f WHERE f.ID = v_ID;
END
#
但是,我不确定这是否会解决没有选择任何行的问题。
答案 1 :(得分:0)
我终于明白了。
BEGIN
DECLARE v_IDParentFolder INT;
DECLARE v_Name VARCHAR(255);
SET path='';
REPEAT
SELECT IDParentFolder,Name INTO v_IDParentFolder, v_Name FROM folders WHERE ID = IDFolder;
SET IDFolder = v_IDParentFolder;
SET path = CONCAT(v_Name,'/',path);
UNTIL v_IDParentFolder IS null END REPEAT;
SET path = CONCAT('/',path);
END
对于“SELECT FROM FROM folders”我错误地将'path'误认为'name',所以我确实得不到任何结果......
对于SQL中的其他初学者,尤其是过程,SELECT查询不会保存结果但返回它,为了只保存结果“INTO”必须在我的代码中使用,并且必须声明这些变量在程序开始时。
感谢那个向我投降的人,他真的很有帮助。
答案 2 :(得分:0)
你的代码错了,使用mysqli扩展你应该准备避免sql注入。
你不应该把查询放到一个循环中,你会遍历一个记录集,但在你的情况下你得到一行所以没有意义。这就是你应该做的:
$query = 'SELECT path FROM folders WHERE ID = ?';
$stmt = $mysqli->prepare($query);
$stmt->bind_param('i', $id);
if ($stmt->execute()){
$row = $stmt->fetch_assoc();
$path = $row['path'];
}
return $path;