PHP MYSQL使用数组中的值更新多行

时间:2013-03-20 00:54:12

标签: php mysql arrays mysqli sql-update

我已经解决了这个问题一段时间了,我已经被困了几天了。 我所拥有的是一个基本的博客系统,现在我一直试图删除/隐藏列表中的帖子。

if(isset($_POST['hideBtn']) && isset($_POST['hidePost'])){
   $checked = $_POST['hidePost'];
   print_r($checked);
} elseif(isset($_POST['hideBtn']) && !isset($_POST['hidePost'])){
   echo "Nothing Selected";
}

列表中显示的每个帖子都有一个复选框。

<input type="checkbox" name="hidePost[]" value="<?php echo $post_id;?>">

现在,当我运行上面的脚本并检查10,8和4后,然后按“hideBtn”按钮,我得到:

  

数组([0] =&gt; 10 [1] =&gt; 8 [1] =&gt; 4)

这是我被卡住的地方。我正在尝试获取此数组的值并在MSQL查询中使用它们来查找我要隐藏的post_id:

if(isset($_POST['hideBtn']) && isset($_POST['hidePost'])){
   $checked = $_POST['hidePost'];
   print_r($checked);
   $hide_post = 'UPDATE post SET hide_post=1 
                 WHERE post_id IN (' . implode(',', array_map('intval', $checked)) . ')';
   $db->query($hide_post);
} elseif(isset($_POST['hideBtn']) && !isset($_POST['hidePost'])){
   echo "Nothing Selected";
}

这给了我与以前相同的结果:

  

数组([0] =&gt; 10 [1] =&gt; 8 [1] =&gt; 4)

并且数据库没有变化。

这是数据库表,hide_post默认为0:

  

发布了post_id user_id title body hide_post

修改

好吧看来我的问题是由于一个连接上的数据库查询过多。

这是我在页面顶部包含的内容:

<?php

//get record count
$record_count = $db->query("SELECT * FROM post");

//number of posts per page
$per_page = 4;
//number of pages
$pages = ceil($record_count->num_rows/$per_page);

//get page number
if(isset($_GET['p']) && is_numeric($_GET['p'])){
    $page = $_GET['p'];
}else{
    $page = 1;
}

if($page<=0){
    $start = 0;
}else{
    $start = $page * $per_page - $per_page;
}

$prev = $page - 1;
$next = $page + 1;

//get post information from database
$query = $db->prepare("SELECT post_id, title, LEFT(body, 100) AS body, posted, category, user_name FROM post
                        INNER JOIN categories ON categories.category_id=post.category_id 
                        INNER JOIN user ON user.user_id=post.user_id
                        WHERE hide_post = 0
                        order by post_id desc limit $start, $per_page");

$query->execute();
$query->bind_result($post_id, $title, $body, $posted, $category, $user_name);
?>

从我读到的关于我得到的错误:Commands out of sync; you can't run this command now我想我需要使用mutli_query$stmt->store_result()但这是我第一次使用php和mysql而我我不知道怎么做。

编辑2

好吧,我找到了另一种方法来修复它,我所做的只是将隐藏帖子的查询移动到运行实际获取帖子信息的while()之下。我希望我早点意识到这一点。

2 个答案:

答案 0 :(得分:0)

使用此代码

$checked = array ( 0 => 10, 1 => 8, 2 => 4 );
//print_r($checked);
$hide_post = 'UPDATE post SET hide_post=1 
WHERE post_id IN (' . implode(',', array_map('intval', $checked)) . ')';

echo $hide_post; 

您的查询变为

UPDATE post SET hide_post=1 WHERE post_id IN (10,8,4) 

phpmyadmin中运行相同的查询,并检查相同的查询是否返回了ant错误。

答案 1 :(得分:0)

事实证明,我的问题不是由查询本身引起的,而是我放置它的地方。

我必须做的就是避免错误:Commands out of sync; you can't run this command now是我的第二个查询,它隐藏/删除用户选择的帖子,并在while()循环之后放置查询每个帖子都会fetch()

基本上我是在第一个查询完成之前尝试进行第二次查询。