我在phpMyAdmin檢查這一點,它返回1個結果:奇怪的行數的回報/ MySQL的PDO
SELECT id, name
FROM tbl_product_category
INNER JOIN tbl_product_cat_basket AS basket
ON id = basket.cat_id
WHERE basket.product_id = 2
LIMIT 0,1
然後我在phpMyAdmin檢查這一點,它返回COUNT = 1:
SELECT COUNT(*)
FROM tbl_product_category
INNER JOIN tbl_product_cat_basket AS basket
ON id = basket.cat_id
WHERE basket.product_id = 2
LIMIT 0,1
現在我不明白爲什麼這會導致$rows
返回空字符串或NULL:
function getProductCategory($product_id) {
$sql = "SELECT id, name FROM tbl_product_category
INNER JOIN tbl_product_cat_basket AS basket
ON id = basket.cat_id
WHERE basket.product_id = ?
LIMIT 0,1;";
$data = array((int)$product_id);
$rows = dbRowsCount($sql, $data);
logErrors("getProductCategory(".$product_id.") returned rows: ".$rows);
if ($rows == 1) {
dbQuery($sql, $data);
return dbFetch();
} else {
return null;
}
}
的logErrors
方法使我這個輸出:
getProductCategory(1)返回的行:
getProductCategory(2)返回的行:
getProductCategory(3)返回的行:
getProductCategory(4)返回的行:
getProductCategory (5)返回的行:
等我從方法返回null
。
我的dbRowsCount(...)
方法轉換SQL做一個SELECT COUNT(*)
,然後dbQuery(...)
執行真正的查詢。這很奇怪,因爲到目前爲止,dbRowsCount(...)
總是爲我的其他查詢返回正確的行。
這無論如何:
function dbRowsCount($sql, $data) {
global $db, $query;
$regex = '/^SELECT\s+(?:ALL\s+|DISTINCT\s+)?(?:.*?)\s+FROM\s+(.*)$/i';
if (preg_match($regex, $sql, $output) > 0) {
$query = $db->prepare("SELECT COUNT(*) FROM {$output[1]}");
$query->setFetchMode(PDO::FETCH_NUM);
if ($data != null)
$query->execute($data);
else
$query->execute();
if (!$query) {
echo "Oops! There was an error: PDOStatement returned false.";
exit;
}
return $query->fetchColumn();
}
return false;
}
那麼是什麼出了問題?
編輯
下面是我的一些程序輸出: [原創查詢] [正則表達式後查詢]
SELECT id, name FROM tbl_product_category INNER JOIN tbl_product_cat_basket AS basket ON id = basket.cat_id WHERE basket.product_id = ? LIMIT 0,1;
SELECT COUNT(*) FROM tbl_product_category
getProductCategory(1) returned rows: 7
SELECT id, name FROM tbl_product_category INNER JOIN tbl_product_cat_basket AS basket ON id = basket.cat_id WHERE basket.product_id = ? LIMIT 0,1;
SELECT COUNT(*) FROM tbl_product_category
getProductCategory(2) returned rows: 7
SELECT id, name FROM tbl_product_category INNER JOIN tbl_product_cat_basket AS basket ON id = basket.cat_id WHERE basket.product_id = ? LIMIT 0,1;
SELECT COUNT(*) FROM tbl_product_category
getProductCategory(3) returned rows: 7
SELECT id, name FROM tbl_product_category INNER JOIN tbl_product_cat_basket AS basket ON id = basket.cat_id WHERE basket.product_id = ? LIMIT 0,1;
SELECT COUNT(*) FROM tbl_product_category
getProductCategory(4) returned rows: 7
SELECT id, name FROM tbl_product_category INNER JOIN tbl_product_cat_basket AS basket ON id = basket.cat_id WHERE basket.product_id = ? LIMIT 0,1;
SELECT COUNT(*) FROM tbl_product_category
getProductCategory(5) returned rows: 7
SELECT id, name FROM tbl_product_category INNER JOIN tbl_product_cat_basket AS basket ON id = basket.cat_id WHERE basket.product_id = ? LIMIT 0,1;
SELECT COUNT(*) FROM tbl_product_category
getProductCategory(6) returned rows: 7
SELECT id, name FROM tbl_product_category INNER JOIN tbl_product_cat_basket AS basket ON id = basket.cat_id WHERE basket.product_id = ? LIMIT 0,1;
SELECT COUNT(*) FROM tbl_product_category
getProductCategory(7) returned rows: 7
SELECT id, name FROM tbl_product_category INNER JOIN tbl_product_cat_basket AS basket ON id = basket.cat_id WHERE basket.product_id = ? LIMIT 0,1;
SELECT COUNT(*) FROM tbl_product_category
getProductCategory(8) returned rows: 7
SELECT id, name FROM tbl_product_category INNER JOIN tbl_product_cat_basket AS basket ON id = basket.cat_id WHERE basket.product_id = ? LIMIT 0,1;
SELECT COUNT(*) FROM tbl_product_category
getProductCategory(9) returned rows: 7
SELECT * FROM tbl_store_admin WHERE php_sesskey=?;
SELECT COUNT(*) FROM tbl_store_admin WHERE php_sesskey=?;
SELECT * FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT COUNT(*) FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT * FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT COUNT(*) FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT * FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT COUNT(*) FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT * FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT COUNT(*) FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT * FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT COUNT(*) FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT * FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT COUNT(*) FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT * FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT COUNT(*) FROM tbl_menu_cat_basket WHERE menu_id=?;
SELECT * FROM tbl_product ORDER BY last_update ASC;
SELECT COUNT(*) FROM tbl_product ORDER BY last_update ASC;
'$ output [1]'看起來像什麼? – jeroen
'var_dump(「SELECT COUNT(*)FROM {$ output [1]}」);' – zerkms
@jeroen @zerkms由於某種原因,它現在開始返回$ rows = 7!和正則表達式的輸出是這樣的:'SELECT COUNT(*)FROM tbl_product_category'這是錯誤的 – Ozzy