2016-05-14 12 views
0

私はオブジェクト指向の(またはしようとしている)Mysqliに変換しています。私はさまざまなカテゴリーのページを持っています。私はインクルードにパラメータプレースホルダ'?'を使用して、カテゴリページで正しいカテゴリを呼び出したいと思います。 これは私が得た限りです。ページのカテゴリをどのように指定しますか? WHERE category = applesを指定すると、すべて正常に動作します。PHP MySQLIオブジェクト指向のワイルドカード

私は、これは以下の通りですカテゴリページ

<?php require_once 'maincats_mysqli.php' ?> 

の上部に含まれてい:

以下
<?php 
$db = new mysqli('host', 'userName', '', 'dbName'); 
if ($db->connect_error) { 
    $error = $db->connect_error; 
} else { 
$sql = "SELECT pageName, gImage, prodName, prodPrice 
FROM tableName 
WHERE category = '?' 

ORDER BY dtList DESC"; 

$stmt->bind_param('s', ['$category']); 

$result = $db->query($sql); 
if ($db->error) { 
    $error = $db->error; 
    } 
} 
function getItem($result) { 
return $result->fetch_assoc(); 
    } 
?> 

は、1つのカテゴリページの一部です。どのカテゴリを指定すればいいですか?どんな助けもありがとう。

<?php 
if (isset($error)) { 
echo "<p>$error</p>"; 
    } 
?> 

<?php 
while ($item = getItem($result)) { 
?> 

<a href="http://www.example.com/<?php echo $item['pageName']; ?>"> 
<img src="http://www.example.com/<?php echo $item['gImage'];  ?>"</a> 
<a href="http://www.example.com/<?php echo $item['pageName']; ?>"> 
<?php echo $item['prodName']; ?></a> 
<?php echo $item['prodPrice']; ?> 

<?php 
    } 
?> 
+1

1) '... category = '?'から一重引用符を削除します。 ... '。 2) '$ stmt-> bind_param( 's'、['$ category']);'というステートメントを参照してください。 '$ stmt-> bind_param( 's'、$ category);'。 3)準備した声明を**実行しなかった。 4)RTM、[http://php.net/manual/en/mysqli.quickstart.prepared-statements。php](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) –

+0

変数に一重引用符を使用しないでください。上記の注^も見てください。また、ワイルドカードではなく、 'プレースホルダー'と呼ばれます。 – chris85

+0

ああ、私はほとんど逃した、あなたも** **あなたのクエリを準備していませんでした。 –

答えて

2

まず、$stmtを宣言しません。

次に、?は、この場合はワイルドカードではなく、パラメータのプレースホルダです。クエリを準備するときに、このようなプレースホルダを使用できます($mysqli->prepare($sql))。ドキュメントを参照してください:http://php.net/manual/en/mysqli-stmt.bind-param.php

$sql = "SELECT pageName, gImage, prodName, prodPrice 
    FROM tableName 
    WHERE category = ? 
    ORDER BY dtList DESC"; 

$stmt = $db->prepare($sql); 

第三に、あなたは、単一引用符であなたの変数をカプセル化し、それはドルと文字列とあなたの変数ではなく、そのコンテンツの名前です。そして、それは配列であってはなりません。

$stmt->bind_param('s', $category); 

最終:どこ$categoryがから来ているのでしょうか?あなたが私たちに示すスクリプトには定義されていません。私はそれが$_GETからだと思うので、前の行は次のようになります。

$stmt->execute(); 

EDIT

$stmt->bind_param('s', $_GET['category']); 

最後に、クエリが含まれているあなたの文を実行する必要があります結果を取得するには、getItem()機能は必要ありません。ただそれを削除します。私はここに使用したい場合は、より明確であるPHP control structure alternative syntax

endwhileは単なる }よりも明示的である)

while ($item = $result->fetch_assoc()): 

// do you stuff 

endwhile; 

注:

$result = $stmt->get_result(); 

次に、あなたは$resultをループし、それぞれの行をフェッチすることができます

1

あなたはprepare()がありません。あなたがバインドさパラメータを引用してはならない

<?php 
$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

$city = "Amersfoort"; 

/* create a prepared statement */ 
$stmt = $mysqli->stmt_init(); 
if ($stmt->prepare("SELECT District FROM City WHERE Name=?")) { 

    /* bind parameters for markers */ 
    $stmt->bind_param("s", $city); 

    /* execute query */ 
    $stmt->execute(); 

    /* bind result variables */ 
    $stmt->bind_result($district); 

    /* fetch value */ 
    $stmt->fetch(); 

    printf("%s is in district %s\n", $city, $district); 

    /* close statement */ 
    $stmt->close(); 
} 

/* close connection */ 
$mysqli->close(); 
?> 

注:PHP manual pageの最初の例を見てください。

+0

私はこれで本当に苦労しています。情報はすでに私のdbテーブルにあります。私はちょうどMySQLからMySQLiに自分のeコマースサイトを変換する必要があります。私は、必要な情報を呼び出すために、各商品ページとカテゴリページで「選択」をしていました。私はMySQLiでインクルードにSelectを置くことができると思った。上記のすべての提案を試したが、何も動作していないようだ。 – acvintage

関連する問題