0

プリペアド ステートメントを使用するクラスに mysqli 接続を渡そうとしています。しかし、私は何かが欠けていて、うまくいきません。何が間違っているのですか?

次のコードは「いいえ」を出力します

index.php

$db_host = 'localhost';
$db_name = 'my_database';
$db_user = 'my_user';
$db_password = 'my_password';

$con = new mysqli($db_host,$db_user,$db_password,$db_name);
if (mysqli_connect_errno())
{
    die(mysqli_connect_error()); 
}

$obj = new Obj( $con );

obj.php

Class Obj
{
    public function __construct( mysqli $con )
    {
        $sql = "SELECT * FOM myTable";
        if($con->prepare( $sql ))
        {
            echo "yes";
        }
        else
        {
            echo "no";
        }        
    }
}
4

2 に答える 2

0
Class Obj {
  public function __construct( mysqli $con ) {
    $sql = "SELECT * FROM myTable";
    if($con->prepare( $sql ))       //here, u pass $slq before
    {
        echo "yes";
    }
    else {
        echo "no";
    }
  }
}
于 2013-02-04T09:57:44.540 に答える
0

クラスへの mysqli 接続の受け渡しに失敗した場合、次の行で致命的なエラーが発生します。

public function __construct( mysqli $con )
                             ^^^^^^

しかし、コンストラクターが正常に動作を開始するだけでなく、クラス メソッドにアクセスすることもできます。

if($con->prepare( $sql ))

要約すると、SQL ステートメントの準備中にエラーが発生したためにmysqli::prepare()返されるだけです。false私は mysql に詳しくありませんが、おそらくmysqli::$error_listまたはmysqli::$errorで正確なエラー メッセージを取得できます。

    if($con->prepare( $slq ))
    {
        echo "yes";
    }
    else
    {
        echo "no: " . $con->error;
    } 

IfSELECT * FOM myTableが実際のクエリである場合、スペルを間違えているため、単純な構文エラーだと思いますFROM

于 2013-02-04T10:00:46.793 に答える