Php 使用准备好的语句时没有结果
我想用准备好的语句创建一个简单的select,但结果是我得到了NULL:(当我在没有准备好的语句的情况下执行时,一切都很正常Php 使用准备好的语句时没有结果,php,mysqli,prepared-statement,mariadb,bindparam,Php,Mysqli,Prepared Statement,Mariadb,Bindparam,我想用准备好的语句创建一个简单的select,但结果是我得到了NULL:(当我在没有准备好的语句的情况下执行时,一切都很正常 <?php class DbHandler{ public function select($columns, $table_name, $alias, $where, $order){ //echo(phpinfo()); $db = new mysqli("localhost", "root", "", "superheld
<?php
class DbHandler{
public function select($columns, $table_name, $alias, $where, $order){
//echo(phpinfo());
$db = new mysqli("localhost", "root", "", "superhelden");
if(!$db){
exit("Verbindungsfehler: ".mysqli_connect_error());
}
if(empty($columns)){
$columns = "*";
trigger_error("No columns chosen. Value set to *.", E_USER_WARNING);
} else{
$prepColumns = $columns;
}
if(empty($table_name)){
trigger_error("Tablename must not be empty.", E_USER_ERROR);
}
if(empty($where)){
trigger_error("WHERE is empty so no conditions are set. All entries will be selected.", E_USER_WARNING);
}
//I don't know why but I can't use a param for the tablename
$query = "SELECT ? FROM $table_name";
if(!empty($alias)){
$query .= " AS ?";
}
if(!empty($where)){
$query .= " WHERE ?";
}
//This is working..
$query1 = "SELECT name FROM karten WHERE name='Fausthieb'";
$res = $db->query($query1);
while($row = $res->fetch_assoc()){
echo($row["name"] . "<br>");
}
//.... :(
if(empty($order)){
//Show created query
echo("$query || ");
if($prep = $db->prepare($query)){
if(!empty($alias)){
if(!empty($where)){
$prep->bind_param("sss", $prepColumns, $alias, $where);
} else{
$prep->bind_param("ss", $prepColumns, $alias);
}
} else if(!empty($where)){
//Show params of function
echo("columns: $prepColumns || ");
echo("Where: $where || ");
$prep->bind_param("ss", $prepColumns, $where);
} else {
$prep->bind_param("s", $prepColumns);
}
// print_r($prep->result_metadata());
// echo(var_dump($prep));
$prep->execute();
var_dump($prep->error);
echo(" || ");
$prep->bind_result($result);
$prep->fetch();
echo(gettype($result));
$prep->close();
}else{
var_dump($db->error);
}
} else {
$query .= " ORDER BY ?";
if($prep = $db->prepare($query)){
if(!empty($alias)){
if(!empty($where)){
$prep->bind_param("ssss", $prepColumns, $alias, $where, $order);
} else{
$prep->bind_param("sss", $prepColumns, $alias, $order);
}
} else if(!empty($where)){
$prep->bind_param("sss", $prepColumns, $where, $order);
} else {
$prep->bind_param("ss", $prepColumns, $order);
}
$prep->execute();
$prep->bind_result($result);
$prep->fetch();
echo($result);
$prep->close();
}else{
var_dump($db->error);
}
}
}
}
?>
然后我得到了这个,效果很好
<?php
include("dbconnect.php");
$pepper = "KratzigeStirn?!";
$username = $_POST["username"];
$prep = $db->prepare("SELECT name FROM spieler WHERE name=?");
$prep->bind_param("s", $username);
$prep->execute();
$prep->bind_result($user);
$prep->fetch();
$prep->close();
$email = $_POST["email"];
$prep = $db->prepare("SELECT email FROM spieler WHERE email=?");
$prep->bind_param("s", $email);
$prep->execute();
$prep->bind_result($mail);
$prep->fetch();
$prep->close();
if($user == "" && $mail == ""){
$password = password_hash($_POST["password"].$pepper, PASSWORD_BCRYPT);
$prep = $db->prepare("INSERT INTO spieler(name, passwort, email) VALUES(?, ?, ?)");
$prep->bind_param("sss", $username, $password, $email);
$prep->execute();
$prep->close();
} else if($user == $username){
echo "Benutzer existiert schon..";
} else if($mail == $email){
echo "E-Mail bereits vergeben..";
}
$db->close();
?>
有什么区别?我能做些什么才能让SELECT正常工作:/
My DB图表和表属性:
如果我忘记了任何需要的信息,请告诉我,如果可能,我会添加:)这是我正在使用的PHP类和示例PHP代码 用法:
$RTmysqli= new RTlib\RTphp\RTmysqli();
$RTmysqli->config(DB_HOST, DB_UNAME, DB_PWORD, DB_NAME);
$result = $RTmysqli->query("SELECT * FROM slider ORDER BY id");
if (!empty($result)) {
foreach($result as $row) {
print "<br>" . $row["id"] . "(" . $row["title"] . ")\n";
}
}
$RTmysqli=new RTlib\RTphp\RTmysqli();
$RTmysqli->config(DB_主机、DB_UNAME、DB_PWORD、DB_名称);
$result=$RTmysqli->query(“按id从滑块顺序选择*);
如果(!空($result)){
foreach($结果为$行){
打印“
”$row[“id”]。”(“$row[“title”]。”)\n”;
}
}
希望有帮助。:) 您不能对表或列名使用占位符,只能对值使用占位符。哦,好吧,那我为什么不得到一个错误呢?您的查询在语法上没有问题,它只是做不到您想要的。它将把参数视为文字字符串。所以它就像是从卡顿选择“name='Fausthieb'”中选择“name”。谢谢!这帮了大忙:)嗯,对于一岁的孩子来说,这是一份了不起的工作。尽管有了额外的知识,你可以使它简单十倍:)无论哪种方式,以这样的速度,你都可以在不到一年的时间内获得这些知识。谢谢你的评论:)。
$RTmysqli= new RTlib\RTphp\RTmysqli();
$RTmysqli->config(DB_HOST, DB_UNAME, DB_PWORD, DB_NAME);
$result = $RTmysqli->query("SELECT * FROM slider ORDER BY id");
if (!empty($result)) {
foreach($result as $row) {
print "<br>" . $row["id"] . "(" . $row["title"] . ")\n";
}
}