2016-07-01 11 views
0

テーブルのすべての行をループし、1つの列の最後から5文字を削除しようとしています。私は次のコードを書いていますが、それは何らかの理由で2文字を削除するようです。テーブルの各列の最後から5文字を削除する方法MySQLi

<?php 
$connection = new mysqli('localhost', 'nawd_test', 'password', 'nawd_test'); 

if ($connection->connect_errno > 0) { 
    die ('Unable to connect to database [' . $connection->connect_error . ']'); 
} 

$sql = "SELECT * 
     FROM test"; 

if (!$result = $connection->query($sql)) { 
    die ('There was an error running query[' . $connection->error . ']'); 
} 

//Create an array to hold the values of id's already changed 
$ids = []; 
$newVals = []; 

echo '<p>Fetching rows...</p>'; 
while ($row = $result->fetch_assoc()) { 
    //Check/Add the id 
    if (in_array($row['id'], $ids)) { 
     echo '<p style="red"><strong>Error: Script has repeated itself!</strong></p>'; 
     break; 
    } 
    $ids[] = $row['id']; 

    $rowName = $row['name']; 
    $newName = substr($rowName, -1); 
    $newName = rtrim($rowName,$newName); 
    $newVals[] = $newName; 
} 

//Now loop and update 
$newValID = 0; 
foreach ($ids as &$id) { 
    echo '<p>Updating row with ID ' . $id . '</p>'; 
    mysqli_query($connection, "UPDATE test SET name ='" . $newVals[$newValID] . "' WHERE id=" . $id); 
    echo '<p>Column successfully changed "<em>' . $newVals[$newValID] . '</em>"</p>'; 
    $newValID++; 
} 

echo '<p style="color: green;"><strong>Script complete!</strong></p>'; 
?> 
+1

あなたは、あなたのテーブル構造を追加することができますあなたはクエリ –

+0

から変更することができます '$ newName = substr($ rowName、-1);' $ newName = substr($ rowName、-4); ' –

+0

SUBSTRING()またはPHP –

答えて

1

いけないPHPでこれを行うには、単一のSQLクエリでそれを行うことができます。

UPDATE test SET name = LEFT(name, LENGTH(name) - 5) 
+0

これはうまくいった!神は送る:) –

+0

問題ない、うれしい私はあなたを助けることができる – Steve

0

あなたが作業している途中で

$newName = substr($rowName, 0, strlen($rowName) - 5); 

への変更は

$newName = substr($rowName, -1); 
$newName = rtrim($rowName,$newName); 

、あなたが最後に削除されているでしょうどのように多くの文字を予測することができませんでした。 最小1、単語全体を最大にします。

rtrimsubstrに関するドキュメントをお読みください。

+0

でmb_substr()を使用しましたが、これを試して、名前に '1234567890'の行を追加しましたが、それ、どんなアイデア? –

0

クエリ内であれば、あなたのwannaのdoItこれを試してみてください。

update table1 set name=substr(name,-5,length(name)) 
関連する問題