Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQLI准备的语句_Php_Mysqli - Fatal编程技术网

Php SQLI准备的语句

Php SQLI准备的语句,php,mysqli,Php,Mysqli,我已经修改了我的代码,希望这是一个多一点,它应该是和感谢你们所有的帮助,这是非常感谢 <?php $mysqli = new mysqli("localhost", "root", "", "project"); if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } if ($stmt = $mysqli->prepare("SELECT

我已经修改了我的代码,希望这是一个多一点,它应该是和感谢你们所有的帮助,这是非常感谢

    <?php
$mysqli = new mysqli("localhost", "root", "", "project");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
if ($stmt = $mysqli->prepare("SELECT * FROM users WHERE ? BETWEEN ? AND ?")){



$stmt->bind_param('iii',$weight, $weight1 ,$weight2);

$weight = "weight";
$weight1 = "weight + 1";
$weight2 = "weight - 1";

$stmt->execute();

echo "{$weight}";
echo "{$weight1}";
echo "{$weight2}";

$stmt->close();
}
else {

printf("Prepared Statement Error: %s\n", $mysqli->error);
}
?>

在绑定变量之前,您不需要分配它吗?像下面这样

<?php
$mysqli = new mysqli("localhost", "root", "", "project");

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

$weight = ???;
$betweenOne = ???;
$betweenTwo = ???;

if ($stmt = $mysqli->prepare("SELECT * FROM users WHERE ? BETWEEN ? AND ?")) {

    $stmt->bind_param('iii', $weight, $betweenOne, $betweenTwo);

    $stmt->execute();

    echo $weight;

    $stmt->close();
} else {
    printf("Prepared Statement Error: %s\n", $mysqli->error);
}

首先,请自己帮个忙,不要学习MySQL编写的语句,而是考虑PDO准备好的语句。< /P> 接下来,无论您选择哪种方法,都要首先注意错误报告

接下来,无论选择哪种方法,都必须计算占位符。它们具有以匹配绑定变量的数量。在您的代码中,它们不是

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "root", "", "project");
$stmt = $mysqli->prepare("SELECT * FROM users WHERE weight BETWEEN ? AND ?");

$stmt->bind_param('ii', $from, $to);
$from = -1;
$to = 1;
$stmt->execute();
$res = $stmt->get_result();
var_dump($res->fetch_assoc());

您在prepare语句中使用了2'?'。这意味着您必须在
bind_param()
Sidenote()中使用两个变量:这一行
如果($stmt=$mysqli->prepare(“SELECT…”
缺少一个结束语
进一步到@Fred的注释,请仅在此处显示您尝试过的代码-如果它会导致解析错误,需要首先修复该错误
:)
。我希望您的问题得到解决,毕竟注释等仍然没有太多意义。我认为您唯一的选择是使用准备好的语句发布您想要运行的原始SQL查询。权重包含数字,请将“ss”更改为“ii”侧注:这一行
如果($stmt=$mysqli->prepare('选择….
缺少一个结束语
——与OP的相同。注意SO的语法突出显示?@OliverBS您在
echo$weight
上缺少一个双引号,或者删除add one moreNo,no double quote的双引号@Tabby@Fred-ii-同意双引号将使php更加有效,没有任何理由。