как правильно использовать mysqli_stmt :: bindParam ()

У меня проблемы с пониманием, как правильно использовать bindParam ();

Я следил за деталями по следующему URL: http://php.net/manual/en/pdo.prepared-statements.php которые показывают следующее как один из их примеров:

<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// insert one row
$name = 'one';
$value = 1;
$stmt->execute();

// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
?>

Этот пример явно неполный, однако он показывает достаточно деталей, чтобы я мог воспроизвести те же результаты.

Я вынул приведенный ниже код из моей основной программы и поместил его в свой собственный файл, чтобы посмотреть, смогу ли я изолировать проблему до сих пор. Я реплицировал фрагмент своих входных данных, чтобы воссоздать те же условия, что и реальные данные, и, ну, я понял это правильно, потому что я получаю ту же ошибку.

Я получаю сообщение об ошибке: Call to undefined method mysqli_stmt::bindparam() что заставляет меня верить, что что-то не так stmt, Итак, я вставил некоторый код отладки, чтобы увидеть, что внутри stmt, Похоже, что это объект, так что он определен, здесь нет ошибок SQL, указывающих на ошибку синтаксиса SQL, все соединяется и, кажется, функционирует нормально, и объект кажется мне определенным, однако минута это идет, чтобы использовать это, это не определено.

Я в растерянности, поскольку следовал примеру как мог. Похоже на то bindParam() использует ссылки при настройке, поэтому я создал переменные заранее, чтобы у него было с чем работать.

В этом есть что-то, чего я не понимаю, и документация не объясняет достаточно, чтобы я понял это.

Ниже приведен тестовый скрипт, который я использую, это полный файл, за исключением некоторых очевидных вещей.

<?php
$servername = "localhost";
$username   = "-----";
$password   = "--------";
$dbname     = "-----";
$EN["Data"]["Episode"][1]["id"] = "1";
$EN["Data"]["Episode"][1]["seasonid"] = "14";
$EN["Data"]["Episode"][1]["seriesid"] = "143";
$EN["Data"]["Episode"][1]["SeasonNumber"] = "1";
$EN["Data"]["Episode"][1]["EpisodeName"] = "1";
$EN["Data"]["Episode"][2]["id"] = "2";
$EN["Data"]["Episode"][2]["seasonid"] = "14";
$EN["Data"]["Episode"][2]["seriesid"] = "143";
$EN["Data"]["Episode"][2]["SeasonNumber"] = "1";
$EN["Data"]["Episode"][2]["EpisodeName"] = "2";

echo "<pre>";
print_r($EN);
echo "</pre>";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if (! $conn->set_charset("utf8mb4")) {
die("Error loading character set utf8: " . $conn->error);
}
$stmt = $conn->prepare( "INSERT INTO TVEpisodes
(id,  seasonid,  seriesid,  SeasonNumber,  EpisodeName)
VALUES (?, ?, ?, ?, ?)" );

if ($stmt == FALSE) {    /*<--- didn't fail here. */
echo "Error: " . $sql . "<br>" . $conn->error;
exit();  // should not happen at this point, mabye...
}
echo "<pre>";
var_dump($stmt);         /*<--- both show I have data.*/
print_r($stmt);
echo "</pre>";

$episode_id = " ";
$episode_seasonid = " ";
$episode_seriesid = " ";
$episode_SeasonNumber = " ";
$episode_EpisodeName = " ";

$stmt->bindParam(1, $episode_id);  /*<------ fails here.*/
echo "<pre>";
var_dump($stmt);
print_r($stmt);
echo "</pre>";
$stmt->bindParam(2, $episode_seasonid);
$stmt->bindParam(3, $episode_seriesid);
$stmt->bindParam(4, $episode_SeasonNumber);
$stmt->bindParam(5, $episode_EpisodeName);
foreach ($EN["Data"]["Episode"] as &$episode) {
echo "<pre>->>>";
print_r($episode);
echo "<<<<- </pre>";
$episode_id = $episode["id"];
$episode_seasonid = $episode["seasonid"];
$episode_seriesid = $episode["seriesid"];
$episode_SeasonNumber = $episode["SeasonNumber"];
$episode_EpisodeName = $episode["EpisodeName"];
if ($stmt->execute() != TRUE) {
echo "Error: " . $sql . "<br>" . $conn->error;
exit();  // should not happen at this point, mabye...
}
}
?>

Это выходная страница, показывающая значения, которые выкладываются.

Array
(
[Data] => Array
(
[Episode] => Array
(
[1] => Array
(
[id] => 1
[seasonid] => 14
[seriesid] => 143
[SeasonNumber] => 1
[EpisodeName] => 1
)

[2] => Array
(
[id] => 2
[seasonid] => 14
[seriesid] => 143
[SeasonNumber] => 1
[EpisodeName] => 2
)

)

)

)
object(mysqli_stmt)[2]
public 'affected_rows' => null
public 'insert_id' => null
public 'num_rows' => null
public 'param_count' => null
public 'field_count' => null
public 'errno' => null
public 'error' => null
public 'error_list' => null
public 'sqlstate' => null
public 'id' => null
mysqli_stmt Object
(
[affected_rows] => 0
[insert_id] => 0
[num_rows] => 0
[param_count] => 5
[field_count] => 0
[errno] => 0
[error] =>
[error_list] => Array
(
)

[sqlstate] => 00000
[id] => 1
)

( ! ) Fatal error: Call to undefined method
mysqli_stmt::bindparam() in /home/-long-path-/test.php on line 45

0

Решение

прежде всего ссылка, которую вы дали в первом абзаце, принадлежит PDO. Но в заголовке вы сказали msqli, а в коде вы создали mysqli.

Так что вам нужно прочитать документацию здесь:

http://php.net/manual/en/mysqli-stmt.bind-param.php

$stmt->bindParam('ssss', $episode_seasonid,$episode_seriesid,$episode_SeasonNumber,$episode_EpisodeName);
0

Другие решения

Mysqli имеет bind_param в PDO вы используете bindParam

0

По вопросам рекламы [email protected]