我在使用下面的代码时遇到了一些问题。我要做的是判断表标记中是否已存在标记,如果存在,则获取id
并将id
放入表blog_post_tags中,或者如果它不存在,创建它,获取id
并将其放在blog_post_tags表中。问题在于,每当我尝试检查id
是否已经存在时,我都会在整个地方收到错误,告诉我trying to get property of non object
但是字段仍然在另一个表中插入{{1} } id
(这不是标签的有效ID)。
以下是代码:
0
提前感谢您的帮助。
一些如何,“试图获取非对象的属性”消失了,我怀疑它可能是与服务器的连接错误,但我真的无法告诉,仍然表blog_post_tags正在填充不能制作的字段任何意义上,“tag_id = 0”。我怀疑它可能与此处表达的问题有关:php prepared stmt problem- update data at each result loop ¿如果问题与上面链接的问题有关,我怎么能纠正我的代码?
答案 0 :(得分:0)
错误“试图获取非对象的属性”可能是因为错误的SQL语句。我建议通过回显用于搜索记录的SQL语句并将该输出粘贴到mysql控制台中来调试脚本。另一件值得一提的是,除非用tildas(`)括起来,否则列名“id”不起作用,所以你的语句看起来应该是这样的:
"SELECT `id` FROM `tags` WHERE `name` = '$name'"
希望有所帮助。
答案 1 :(得分:0)
好吧,我真的不知道它做了什么,但它似乎有效,这里的代码没有任何错误:
foreach ($tags as $tag)
{
//search for the tag to see if it exists
if ($select_stmt = $mysqli->prepare("SELECT id FROM tags WHERE name = ?"))
{
$select_stmt->bind_param("s", $tag);
$select_stmt->execute();
$select_stmt->store_result();
if ($select_stmt->num_rows() > 0)
{
$select_stmt->bind_result($tagid);
$select_stmt->fetch();
if ($insert_stmt = $mysqli->prepare("INSERT INTO blog_post_tags (blog_post_id, tag_id) VALUES (?, ?)"))
{
$insert_stmt->bind_param('ii', $blogid, $tagid);
$insert_stmt->execute();
}
}
else
{
if ($insert_stmt2 = $mysqli->prepare("INSERT INTO tags (name) VALUES (?)"))
{
$insert_stmt2->bind_param('s', $tag);
$insert_stmt2->execute();
$tagid = $mysqli->insert_id;
if ($insert_stmt3 = $mysqli->prepare("INSERT INTO blog_post_tags (blog_post_id, tag_id) VALUES (?, ?)"))
{
$insert_stmt3->bind_param('ii', $blogid, $tagid);
$insert_stmt3->execute();
}
}
}
}
}
希望这可以帮助遇到类似问题的任何人,我也想知道这个解决方案是否是最佳的,或者是否有任何改进方法。