将每个行列更新为新列

时间:2014-07-23 12:59:00

标签: php mysql

我的桌子上有很多行。其中一列称为name。我还有一个名为blog_id的新列。我想让每个blog_id像这样:

$blog_id = strtolower(preg_replace('/-+/', '-', preg_replace('/[^\wáéíóú]/', '-', $name)));

我试过这个:

$con=mysqli_connect("localhost","foo","bar","blog");

$fetch = mysqli_query($con,"SELECT name
FROM entries");

foreach($fetch as $name2){

$id = strtolower(preg_replace('/-+/', '-', preg_replace('/[^\wáéíóú]/', '-', $name2)));

$result = mysqli_query($con,"INSERT INTO entries (blog_id)
VALUES ('$id')");

}
mysqli_close($con);

但我收到错误strtolower() expects parameter 1 to be string, array given我做错了什么?

1 个答案:

答案 0 :(得分:1)

尝试:

foreach($fetch as $row){
    $id = strtolower(preg_replace('/-+/', '-', preg_replace('/[^\wáéíóú]/', '-', $row['name'])));
    $result = mysqli_query($con,"INSERT INTO entries (blog_id) VALUES ('$id')");
}

你循环遍历每一行,每一行都是你在查询中选择的数组,在本例中是'name',我想你希望循环一个名字数组而不是带名字的行。

修改

我可能也会这样做,以确保:

while($row = mysqli_fetch_array($fetch)){
    $id = strtolower(preg_replace('/-+/', '-', preg_replace('/[^\wáéíóú]/', '-', $row['name'])));
    $result = mysqli_query($con,"INSERT INTO entries (blog_id) VALUES ('$id')");
}

编辑2

您应该更新它们,而不是插入行。 在这种情况下,您还应该获取行的id,因此您的SELECT代码将是:

$fetch = mysqli_query($con,"SELECT id, name FROM entries");
那么你应该这样做:

while($row = mysqli_fetch_array($fetch)){
    $id = strtolower(preg_replace('/-+/', '-', preg_replace('/[^\wáéíóú]/', '-', $row['name'])));
    $result = mysqli_query($con,"UPDATE entries SET blog_id='".$id."' WHERE id=".$row['id']);
}