2012-02-04 112 views
-1

我正在使用一段不錯的代碼來使用drag and drop重新排列數據庫內容。我可以通過在php.ini文件中啓用PDO擴展來實現本地工作,但我的託管軟件包(共享)不允許同時使用PDO和MySQLi。我不熟悉PDO,如果可能的話,我將不勝感激任何幫助重寫以下部分以使用MySQLi。 謝謝。php:將pdo內容轉換爲mysqli

<?php 
if (isset($_POST['orders'])) { 

} else { 
    echo json_encode(array('error' => true)); 
} 

$orders = explode('&', $_POST['orders']); 

$array = array(); 

foreach($orders as $item) { 
    $item = explode('=', $item); 
    $item = explode('_', $item[1]); 
    $array[] = $item[1]; 
} 

try { 

    $objDb = new PDO('mysql:host=localhost;dbname=test', 'user', 'pw'); 
    $objDb->exec("SET CHARACTER SET utf8"); 

    foreach($array as $key => $value) { 
     $key = $key + 1; 
     $sql = "UPDATE `artwork` 
       SET `listorder` = ? 
       WHERE `id` = ?"; 
       echo $sql; 

     $objDb->prepare($sql)->execute(array($key, $value));   
    } 

    echo json_encode(array('error' => false)); 

} catch(Exception $e) { 

    echo json_encode(array('error' => true)); 

} 
+3

這基本上是一個單一的查詢,你必須在那裏翻譯。你有什麼嘗試? – deceze 2012-02-04 00:51:39

回答

2

我的推薦?找到另一個主機。從PDO轉到mysqli並不是一個好主意,因爲你會浪費時間將代碼移植到不太便攜的狀態。

- 編輯 -

你可以試試下面的代碼片段,如果它不工作,它應該讓你開始。我無法測試它,因爲我的服務器沒有編譯mysql *模塊。

$dbo = new mysqli('localhost', 'user', 'password', 'database'); 

if (mysqli_connect_error()) { 
    echo sprintf('Unable to connect: ErrNo: (%d), ErrMsg: (%s)', mysqli_connect_errno, mysqli_connect_error()); 
    exit; 
} 

foreach ($array as $key => $value) { 

    $key = $key + 1; 

    $sql = "UPDATE `artwork` SET `listorder` = " . (int) $key . " WHERE `id` = " . (int) $value; 

    $dbo->query($sql); 
} 

$dbo->close(); 

你可以得到更多關於mysqli查詢和其他功能的信息here

無論如何,祝你好運。

+5

+1聽起來像垃圾主機。更不用說PDO是在數據庫上操作的事實上的「正確」方式,而不是強壯的mysql *擴展 – rdlowrey 2012-02-04 00:47:23

+0

同意110%。從PDO到任何應該發生的事情的唯一移植是如果您正在轉向ORM。從PDO到mysql *就像從菲力牛扒回到頂級拉麪。 – 2012-02-04 00:49:41

+0

我最終可能會這樣做,因爲這個功能相當重要,我還需要開始掌握PDO,但是我很想看看MySQLi能否完成上述操作。我很欣賞我需要陷入教程,但如果可能的話,對上述內容的快速修復會很好,因爲我不可能立即更改主機(客戶端帳戶)。 – caseyc 2012-02-04 00:52:40