ホームページ >バックエンド開発 >PHPチュートリアル >[アドバイスを求める] 5.2 ではセッション データベース エラーが発生するのに、5.5 では正常であるのはなぜですか?
ini 設定ファイルはすべてデフォルトです (そのはずです。変更した覚えはありません)
助けてください、わかりません
エラーメッセージに示されたファイルとエラー行をよく見てください
エラーメッセージに示されたファイルとエラー行をよく見てください
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 の値数と一致しません
$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 になります
どうしても表示されない場合は、仕方ありません
テーブルのデータ列が指定された値と一致しません。このエラーは非常によく発生します。デフォルトを指定するか、値を指定してください。自分を騙さないでください!
テーブルには 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 のphp 5.4 は列数が行 1 の値数と一致しません
これがエラーです
警告: session_start() [function.session-start]: セッション キャッシュ リミッターを送信できません - ヘッダーはすでに送信されています (出力は D:projectmyCodemystatephpczbkwork2015.05core で開始されました)