试图在blog_post_tag = 0上获取非对象和id的属性

时间:2012-09-19 21:34:45

标签: php prepared-statement

我在使用下面的代码时遇到了一些问题。我要做的是判断表标记中是否已存在标记,如果存在,则获取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 ¿如果问题与上面链接的问题有关,我怎么能纠正我的代码?

2 个答案:

答案 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();
                        }
                    }
                }
            }
         }

希望这可以帮助遇到类似问题的任何人,我也想知道这个解决方案是否是最佳的,或者是否有任何改进方法。