Advertisement
am_dot_com

CN20210407

Apr 7th, 2021 (edited)
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.25 KB | None | 0 0
  1. <?php
  2.  
  3. const SQL_STATEMENT_CREATE_TABLE =
  4. "create table if not exists `%s`.`%s` (
  5.    id int not null auto_increment,
  6.    url varchar(512),
  7.    context text,
  8.    whenFound datetime not null,
  9.    primary key (id)
  10. );";
  11.  
  12. //sql0.php
  13. /*
  14.  * localmente, havendo controlo de php.ini, nem seria necessário fazer
  15.  * extension=php_mysqli.dll #PHP <= 7.2
  16.  * extension = mysqli #PHP >7.2
  17.  
  18.  * composer require ext-mysqli
  19.  * composer require ext-pdo #PHP Data Objects
  20.  *
  21.  * na Google Cloud Shell, o php.ini não nos oferece todas as liberdades
  22.  * por isso, ignorar as restrições na escrita do composer.json
  23.  * que depois será utilizado pelo app engine
  24.  * composer require ext-mysqli --ignore-platform-reqs
  25.  * composer require ext-pdo --ignore-platform-reqs
  26.  *
  27.  * no SDK, ou no shell terminal, fizémos ainda:
  28.  * gcloud sql instances list #implicou ativar uma API para autorizar consultas ao serviço admin de SQL
  29.  * gcloud sql instances create am-210407 --tier=db-f1-micro --region=europe-west1 #criou a SQL instance "am-210407"
  30.  *
  31.  * a criação da SQL instance demorou minutos
  32.  * a instance foi criada com um user root, mas de password não set
  33.  *
  34.  * estabelecer uma pass para o user root
  35.  * gcloud sql users set-password <user> --host=% --instance=<instance> --password=<password>
  36.  * gcloud sql users set-password root --host=% --instance=am-210407 --password=1234!
  37.  *
  38.  * meta-infos da instância
  39.  * gcloud sql instances describe <instance name>
  40.  * gcloud sql instances describe am-210407
  41.  *
  42.  * prestar atenção à meta-info "connectionName", normalmente, das primeiras infos a serem listadas
  43.  * connectionName: cloud-search-307909:europe-west1:am-210407
  44.  * à connection name aplicamos o prefixo "/cloudsql/"
  45.  * e ficamos com um named-pipe utilizável
  46.  *
  47.  * Uma SQL instance fica associada a um projeto e só pode ser usada por esse projeto
  48. */
  49. define ("CLOUD", false); //true para quando estiver a funcionar no App Engine; false nos outros cenários
  50.  
  51. //ligação ao serviço de MySQL
  52. if (CLOUD){
  53.     //na cloud, a ligação será feita através de um named-pipe
  54.     $db = mysqli_connect(
  55.         null ,//no host!
  56.         $userName = "root",
  57.         $userPassword = "1234!",
  58.         null, //database/schema null means "any database"
  59.         $port=3306,
  60.         //$socketOrNamedPipe = "aguardando q a SQL instance seja criada"
  61.         $socketOrNamedPipe = "/cloudsql/cloud-search-307909:europe-west1:am-210407"
  62.     );
  63. }
  64. else{
  65.     //noutros cenários (local), a ligação será feita por host name
  66.     $db = mysqli_connect(
  67.         "localhost" ,//no host!
  68.         $userName = "test",
  69.         $userPassword = "1234",
  70.         null, //database/schema null means "any database"
  71.         $port=3306//,
  72.         //$socketOrNamedPipe = null
  73.     );
  74. }
  75.  
  76. $e = mysqli_connect_errno(); //código do erro (0 - sem erro)
  77. $eM = mysqli_connect_error(); //mensagem do erro ("" - sem erro)
  78. $strMsg = sprintf(
  79.     "Resultado de mysqli_connect: %d (%s)",
  80.     $e,
  81.     $eM
  82. );
  83. echo $strMsg;
  84.  
  85. //define ("SQL_STATEMENT_TO_CREATE_SCHEMA", "create schema %s;");
  86. const SQL_STATEMENT_TO_CREATE_SCHEMA = "create schema %s;";
  87.  
  88. $bNoConnectionErrors = $e===0;
  89. if ($bNoConnectionErrors){
  90.     //formação da query
  91.     $strQuery = sprintf(
  92.         SQL_STATEMENT_TO_CREATE_SCHEMA,
  93.         "db20210407"
  94.     );
  95.  
  96.     //injeção da query na SQL instance
  97.     $db->query(
  98.         $strQuery
  99.     );
  100.     //OOP
  101.     $e = $db->errno;
  102.     $eM = $db->error;
  103.  
  104.     //procedimental
  105.     /*
  106.     $e = mysqli_errno($db);
  107.     $eM = mysqli_error($db);
  108.     */
  109.     $strMsg = "Result for query $strQuery is $e ($eM)".PHP_EOL;
  110.     echo $strMsg;
  111.  
  112.     /*
  113.      * Para vermos a base de dados criada
  114.      * gcloud sql connect <instance name> --user=root
  115.      * gcloud sql connect am-210407 --user=root
  116.      * será pedida a password (e não será visível enquanto a escrevermos)
  117.      * show databases
  118.      * use db20210407
  119.      */
  120.  
  121.     $strQuery = sprintf(
  122.         SQL_STATEMENT_CREATE_TABLE,
  123.         "db210407", //nome do schema / database
  124.         "searches" //nome da table a criar
  125.     );
  126.     $db->query($strQuery);
  127.     $e = $db->errno;
  128.     $eM = $db->error;
  129.     $strMsg = "Result for query $strQuery is $e ($eM)".PHP_EOL;
  130.     echo $strMsg;
  131.  
  132.  
  133.     $db->close();
  134.     //mysqli_close($db);
  135. }
  136.  
  137.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement