ホームページ >バックエンド開発 >PHPチュートリアル >[アドバイスを求める] 5.2 ではセッション データベース エラーが発生するのに、5.5 では正常であるのはなぜですか?

[アドバイスを求める] 5.2 ではセッション データベース エラーが発生するのに、5.5 では正常であるのはなぜですか?

WBOY
WBOYオリジナル
2016-06-23 13:21:45869ブラウズ








ini 設定ファイルはすべてデフォルトです (そのはずです。変更した覚えはありません)
助けてください、わかりません


に返信議論(解決策)

エラーメッセージに示されたファイルとエラー行をよく見てください

エラーメッセージに示されたファイルとエラー行をよく見てください




リミッター これは理解できません
それCookie ヘッダーが送信されたようです (クライアントがサーバーに送信するか、その逆かは不明です)

すべてのエコーを削除しました。エラー メッセージはありませんが、データはデータベースに保存されません

session_start(); 前に出力がない場合は、echo... 行をコメントアウトして確認してください。

session_start(); その前に出力がないことはありません。echo... 行をコメントアウトして確認してください。


エコーはコメントされていますが、プロンプトはありません。データベースにデータがありません。これは、操作が失敗し、エラー プロンプトが表示されないことを意味します。

誰も解決できませんか?コード (スクリーンショットはありません!)

インポートされたファイル userSession.php

/**
* PhpStorm によって作成されました。
* ユーザー: Admin_BIN
* 日付: 2015/12/2
* 時間: 14:03
 */
function userSessionBegin(){
echo "
Begin
"
}
function userSessionEnd ( ){
echo "
End
";
}
/**
* 読み取り操作
* 実行タイミング: セッション機構がオープンされたときに実行
* 作業: 現在のセッションデータ領域から内容を読み取ります
* @param $sess_id string
* @return string
**/
function userSessionRead($sess_id){
echo "
Read< br />";
//データベースサーバー接続を初期化します
$link=mysqli_connect("localhost","root","root","matchsys");
mysqli_query($link,"set names utf8");
/ /Query
$sql="select session_content from `session` where session_id='$sess_id'";
$result=mysqli_query($link,$sql);
if($row=mysqli_fetch_assoc($result)); $row["session_content"];
}else{
//見つからない場合は空の文字列を返します
using use using using using using through using ‐ ‐ ‐ return ‐ $row["session_content"] ){
echo ";
Write
";
//データベースサーバー接続を初期化します
$link=mysqli_connect("localhost","root","root","matchsys");
mysqli_query($link, "set names utf8");
//$sql="`sess_id','$sess_content') に置き換えます。
//$sql="`session` 値に挿入します(' $sess_id','$sess_content') 重複キー更新 session_content='$sess_content',last_time=unix_timestamp()";
return mysqli_query($link,$sql);
}
/*
* 削除操作
* 実行タイミング: session_destory() はセッション破棄中に呼び出されます (){
echo "
Delete
"
//データベースサーバー接続を初期化します
$link=mysqli_connect("localhost","root") ,"root","matchsys");
mysqli_query($link,"set names utf8");
//削除
$sql="where session_id='$sess_id'"
return mysqli_query( $link,$sql);
}
function userSessionGC(){
echo "
GC
";
//Set
session_set_save_handler("userSessionBegin","userSessionEnd"," userSessionRead",
"userSessionWrite","userSessionDe lete ","userSessionGC");

メインファイル session_3.php

/**
* 書き込み操作
* 実行タイミング: スクリプト サイクルの終わり、PHP が終了するとき
* 作業: 現在のスクリプトによって処理されたセッション データをデータベースに永続化します。
* @param $sess_id string
* @param $sess_content string シリアル化されたセッションコンテンツ文字列
* @return bool
**/
require "./userSession.php";
$_SESSION["class_name"]="PHP";

データベース SQL
データベース matchSys charset utf8 を作成します。 ;
matchSys を使用;
テーブル `session` を作成します (
session_id varchar(40) not null デフォルト ''、
session_content text、
last_time int not null デフォルト 0、
主キー (session_id)
)charset=utf8 Engine=myisam ;

ありがとうございます! ! !

データベース選択を追加しようとしたのですが、これは同じです


列数が行の値数と一致しません。 1
不一致の値の数は 1 にランク付けされます

$sql="replace into `sess`values('$sess_id','$sess_content')"
テーブルには 3 つの列がありますが、挿入されたのは 2 つの列だけです

$time = time ();
$sql="replace into `sess_id','$sess_content', $time)";



列数が行 1 の値数と一致しません

列数が一致しません。値の数は 1 にランク付けされます

$sql="replace into `sess`values('$sess_id','$sess_content')";

テーブルには 3 つの列がありますが、挿入したのは 2 つの列だけです

$time = time();
$sql="replace into `sess_id','$sess_content', $time)";

そのエラー メッセージはこれとは関係ありません。デフォルトを追加した場合でも、挿入しました。 2 つの値、3 番目の値はデフォルトで挿入されます

3 番目の値は指定されておらず、自動的にデフォルト値 0 になります


列数が値の数と一致しません行 1 このエラーを報告してください。

どうしても表示されない場合は、仕方ありません


テーブルのデータ列が指定された値と一致しません。このエラーは非常によく発生します。デフォルトを指定するか、値を指定してください。自分を騙さないでください!
テーブルには session_id、session_content、last_time の 3 つの列があります。
挿入コマンドは $sql="replace into `sess_id','$sess_content')" です

どれを指定すべきだと思いますか?デフォルト?

デフォルトを指定するだけですが、デフォルト以外のフィールドのリストが必要です

または値を指定するだけですが、指定しませんでした

欠けているのは、最後の列である last_time です。つまり、 giveまたは、後でこの値を入力したときに、関数 unix_timestamp()、

が与えられましたが、その値は確かに 0 だったので、それを削除しました。問題は解決されましたが、もう 1 つ問題が発生すると、問題はさらに複雑になります

エコー コメントの後にプロンプ​​トが表示されません。これは、操作が成功せず、エラーがないことを示します。お願いします


挿入されてないって言ってませんでしたか?
そこで、コードを投稿するようにお願いしました

、すべて挿入されていますが、他に何が問題になるでしょうか?

前に 5.2 は機能しないと言いましたが、5.5 は機能します。私が知りたいのは、なぜ 5.2 が機能しないのかということです

userSessionWrite の
return mysqli_query($link,$sql) を
mysqli_query に変更します。 ($link,$ sql) または die(mysqli_error($link));
おわかりでしょう
私が言ったことはすべて実際のテストであり、単なる話ではありません

php 5.4 は列数が行 1 の値数と一致しません

これがエラーです
警告: session_start() [function.session-start]: セッション キャッシュ リミッターを送信できません - ヘッダーはすでに送信されています (出力は D:projectmyCodemystatephpczbkwork2015.05core で開始されました)

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。