ある学生からXAMPPでPHPを使ってて下記エラーがどうしても消えないと
いうことで質問をされました。
Fatal error: Call to undefined function curl_init()
まず、php.iniファイルの下記項目のコメント「;」を外して上書き
extension=php_curl.dll
その後、apacheを再起動するように指示しました。
瞬殺だろうと思ったのですが、うまくいかないらしいです。
おかしいなと思って、libeay32.dll、ssleay32.dll
の存在確認や環境変数Pathが通っているかも確認するも
すべて正常。。。
おかしいなと思っていたのですが、ふと
phpinfo()を使ってConfiguration File (php.ini) Path を確認
してもらって、納得しました。
phpinfoには「xampp\apache\bin」がphp.iniのパスとして
表示されてましたが、彼はこれまで「xampp\php」にあるphp.iniを
編集していたらしいです。
ああ、なるほどねぇ。。。
結構ひっかかる人いるかもね、これ。
日別アーカイブ: 2012年6月24日
[XAMPP]Apacheが停止、再起動できない
掲題の件で困っている人がいたので確認してみました。
とりあえず、XAMPPコントロールパネルを一度終了したのち
「管理者として実行」から起動すると動きました。
XPにどっぷりだとVistaや7で、こんな問題にぶちあたったりしますね。。。
[MySQL]トランザクションが効かない?
掲題の件で困っている人がいたので、見てみたら
フィールドタイプが「MyISAM」になってました。
とりあえず、「InnoDB」に変更して解決。
○MyISAM
・readが早い
○InnoDB
・トランザクションや外部キー制約可
とりあえず、一長一短ありますが、用途に合わせてどちらかを選ぶ感じですな。
更新が多くあって、読みこみスピードが気にならなければとりあえずInnoDBにしとく感じかな。
[PHP]PDO: bindParamで日付型(datetime)をバインドするとき
bindParamは型を自動で判定をしないから、第3引数に定義済み定数で型指定をしないといけない。
・PDO定義済み定数
http://php.net/manual/ja/pdo.constants.php
でも、定数の中にdatetime型など日付型に関する定数が見つかりません。
とりあえず、PDO::PARAM_STRをしていした上で、STR_TO_DATE関数をSQLに与えてみました。
$fld_date = date("Y/m/d H:i:s"); $sql = ""; $sql .= " SELECT * FROM t_track "; //$sql .= " WHERE fld_date = :fld_date "; $sql .= " WHERE fld_date = STR_TO_DATE(:fld_date ,'%Y/%m/%d %H:%i:%s') "; $sth = $dbh->prepare($sql); $sth->bindParam(':fld_date', $fld_date, PDO::PARAM_STR); $sth->execute();
※注意
掲載している内容についてはご自身の責任で参考にされてください。
[PHP]PDO:windowsからlinuxにアップロードすると、bindParamでうまくバインドされない場合
掲題の問い合わせがあったので、調査してみました。
○症状
・windowsからlinuxにアップロードすると、bindParamがうまくバインドされてない
・windows環境では動いていた
・bindParamはtrueを返している
・bindParamを使わずにSQL文を直書きすると動く。
○環境
開発言語:PHP 5.1
DB:MySQL 5.0
・windowsでxamppを使用して開発
・PDO使用
・アップロードするサーバはlinux
○対処
bindParamの型指定(第3引数)をする。
例)
$age = 30; $name = 'tanaka'; $sql = ''; $sql .= 'SELECT * FROM test'; $sql .= ' WHERE age < :age AND name = :name '; $sth = $dbh->prepare($sql); $sth->bindParam(':age', $age, PDO::PARAM_INT); $sth->bindParam(':name', $name, PDO::PARAM_STR, 12); $sth->execute();
そもそも、PDOStatement::bindParamは自動的に型を判定してはくれないので
プログラマ側が明示的に記す必要があります。
bindParamについて型指定までしないサンプルが初心者向けに多いので、
気づかずにここで悩む方結構いるのかも知れません。
PDO::PARAM_STRの場合、これだけを指定しても動いたりしますが
長さ(第4引数)も一応付けた方がいいでしょう。
bindParamは第3引数のデフォルトはPDO::PARAM_STRになってます。
windowsでなぜ動くのかは不明ですが、多分どこかの設定なのかなぁ。
その他の定数については下記を参照してください。
・PDO定義済み定数
http://php.net/manual/ja/pdo.constants.php
日付型に関しては、また次の機会に
○参考
・PHP: PDOStatement::bindParam – Manual
http://php.net/manual/ja/pdostatement.bindparam.php
※注意
掲載している内容についてはご自身の責任で参考にされてください。